有可能得到一个 "精确 "的数值吗?

 

问候。我需要帮助解决一个问题。

// 0.02 * 4.9 = 0.098
DoubleToStr (0.02 * 4.9, 2); // = 0.1
DoubleToString (0.02 * 4.9, 2); // = 0.1
NormalizeDouble (0.02 * 4.9, 2); // = 0.1

所有函数都返回0.1。虽然(0.02*4.9)=0.098,应该返回0.09。

请告诉我如何获得返回我的计算器的确切数值?:)

 

0.02*4.9=0.098 -- 不是0.98

小数点后2位的格式输出-- 0.098将根据四舍五入的规则输出为0.10

如果以3位数格式输出 -- 将输出整数。

 
abolk:

0.02*4.9=0.098 -- 不是0.98

以小数点后2位的格式输出 -- 0.098将根据四舍五入的规则输出为0.10

如果输出是3位数的格式 -- 将打印整数。

谢谢,我纠正了这些数字。

这就是问题所在,你必须在小数点后取2位数。:)为什么它是圆的?如何取一个没有四舍五入、小数点后只有2位的小数(0.09)?

 
WePlexus:

谢谢你,纠正了数字。

这就是问题所在,你必须取两个小数位。:)为什么它是圆的?如何取一个没有四舍五入、小数点后只有2位的小数(0.09)?

将其转换为字符串,并获取数字的数量
 
WePlexus:

谢谢你,纠正了数字。

这就是问题所在,你必须取两个小数位。:)为什么它是圆的?如何取一个没有四舍五入、小数点后只有2位的小数(0.09)?

int a=int(0.098/0.01);
   double b=a*0.01;
   Comment(DoubleToString(b,2));
 
sanyooooook:
把它翻译成一个字符串,并取得你想要的字符数。
你不知道一个更简单的方法吗?
 
Vinin:
你知道有什么更简单的方法吗?
你能给我一个提示吗?:)
 
valeryk:

如果你这样做。

int a=int((0.09*5)/0.01);
double b=a*0.01;
Comment (DoubleToString (b,2));

输出是0.44,而不是要求的0.45。

 
WePlexus:

如果你这样做。

输出是0.44,而不是要求的0.45。

int a=int(MathFloor((0.98)/0.001));
   double b=a*0.001;
   Comment(DoubleToString(b,2));
 
valeryk:

0.098,而不是0.98。:)

int a = int (MathFloor ((0.098) / 0.001));
double b = a * 0.001;
Comment (DoubleToString (b, 2));

返回1,希望精确值=0.09。

 
Vinin:
你知道一个更简单的方法吗?

这是我脑子里蹦出来的第一件事,当然还有更简单的。

它也不复杂,但也许它更慢。

   int DIGITS=2;
   string stroka=DoubleToString(0.09845,8);
   int P=StringFind(stroka,".");
   Print(stroka);
    stroka=StringSubstr(stroka,0,P+DIGITS+1);
   Print(StringToDouble(stroka));

возвращает:

2014.10.04 11:32:53.731	normalize EURUSD,H4: 0.09
2014.10.04 11:32:53.731	normalize EURUSD,H4: 0.09845000

原因: