MT4存在巨大BUG

 
MT4中>,<,>=,<=这四个算符存在BUG,并不能很好的执行,比如x>0.1,执行时,有时候在x=0.1时便会执行后面的语句,而有时候x>=0.1会执行的语句,在x=0.1时不会执行。
 

你的“有时候”指的是什么情况,能不能说的清楚些。

 

干吗不乘10取整后再做整数比较呢?

 
DxdCn 写道 >>

干吗不乘10取整后再做整数比较呢?

取整后不一样了吗?

 
hexinchen 写道 >>

你的“有时候”指的是什么情况,能不能说的清楚些。

是BUG阿,所以,我也说不清是什么时候,但我已经遇到好多次了。

 

if (MathAbs(157.06-156.96)==0.1)
{ Print("偶数确实是对的");}
if (MathAbs(157.05-156.95)==0.1)
{ Print("奇数是错的");}

这段程序运行的结果是没有任何输出。

if (MathAbs(157.06-156.96)>=0.1)
{ Print("偶数确实是对的");}
if (MathAbs(157.05-156.95)>=0.1)
{ Print("奇数是错的");}

if (MathAbs(157.06-156.96)>0.1)
{ Print("偶数确实是对的");}
if (MathAbs(157.05-156.95)>0.1)
{ Print("奇数是错的");}

这两段程序运行的结果是“奇数是错的”

if (MathAbs(157.06-156.96)<=0.1)
{ Print("偶数确实是对的");}
if (MathAbs(157.05-156.95)<=0.1)
{ Print("奇数是错的");}

if (MathAbs(157.06-156.96)<0.1)
{ Print("偶数确实是对的");}
if (MathAbs(157.05-156.95)<0.1)
{ Print("奇数是错的");}

这两段程序运行的结果是“偶数确实是对的”

就因为这个小小的问题,我亏了好多钱,今天才找到问题所在,郁闷了,提醒各位同仁,以后遇到同样问题要注意了,换一个方法。

 
DxdCn 写道 >>

干吗不乘10取整后再做整数比较呢?

谢谢,我知道问题所在了。

 
lf8749 写道 >>

谢谢,我知道问题所在了。

所以不要随便说MT有bug, 很多这样的结论都是因为编写者自己的错误

 
弱弱的问,是不是浮点数精确度问题啊?还是?我也是菜鸟,请达人指教。
 
lf8749 写道 >>
MT4中>,<,>=,<=这四个算符存在BUG,并不能很好的执行,比如x>0.1,执行时,有时候在x=0.1时便会执行后面的语句,而有时候x>=0.1会执行的语句,在x=0.1时不会执行。

.....这个..

在计算机中 浮点数不要用 逻辑操作运算符.0.1在内存中表示可能是 0.09999999999999,或者是 0.0898989889,使用的时候约为 0.1,你用逻辑符号判断是不对的.

 
另外这个不是BUG,只是你没有学多程序设计你不知道这些数据类型的具体情况.不能乱下定论的.