MQL4中双精度数字按位四舍五入时得不到想要的结果

 

NormalizeDouble ( 0.9056999999999999,5)意想是得到 0.9057,事实得到的是  0.9056999999999999.是不是MQL4的解释器的BUG?试过用别的编程语言写了DLL文件导入函数实现相同功能,结果,还是  0.9056999999999999


 

1. 浮点数在计算机中是无法精确表示的.

2. 你要输出指定精度,输出时指定5位小数位,比如 Print(DoubleToString(x,5));

 

谢谢  Ziheng Zhuang的解答。

Ziheng Zhuang
Ziheng Zhuang
  • www.mql5.com
交易者的个人资料
 

printf(DoubleToString( 0.9056999999999999 ,5)),输出结果是“0.90570”的字符串, 想要的结果是double类型,不是string类型,尝试了用printf(StringToDouble(DoubleToString( 0.9056999999999999 ,5))), 输出结果是

 0.9056999999999999 的双精度数,然后用自定义函数 

//+------------------------------------------------------------------+

//|双精度小数截位()函数                                                         |

//+------------------------------------------------------------------+

double DoubleRound(double nu,int dig)

{

  return( StringToDouble( DoubleToString(nu,dig) ) );

}

printf(DoubleRound(  0.9056999999999999 ,5 ) ),

 输出结果是 0.9056999999999999


这个现像只有是在截取位数值为9时会出现。
原因: