(已解决)>=符号对于末尾带0的判断错误问题
本帖最后由 330259789 于 2010-11-24 17:48 编辑看如下测试结果
$A=2.60
$B=2.63
$C=0.03
If $B-$A>=$C Then MsgBox(0,"","真")================假
$A=2.60
$B=2.63
$C=0.02
If $B-$A>=$C Then MsgBox(0,"","真")================真
$A=2.61
$B=2.64
$C=0.03
If $B-$A>=$C Then MsgBox(0,"","真")================真
$A=2.59
$B=2.62
$C=0.03
If $B-$A>=$C Then MsgBox(0,"","真")===============真
但是如果大的带0就又对了
$A=2.57
$B=2.60
$C=0.03
If $B-$A>=$C Then MsgBox(0,"","真")===============真
为什么啊?怎么让第一条测试为真?哪里出问题了? 看看下面的结果.
$A = 2.60
$B = 2.63
$C = 0.03
$d = $B - $A
MsgBox(0, "", $d)
$d = 0.0299999999999998
$A = 2.61
$B = 2.64
$C = 0.03
$d = $B - $A
MsgBox(0, "", $d)
$d = 0.0300000000000002 回复 2# lixiaolong
刚才我也试过了,是这样的。
这样的话我不是不能和0.03比较了?难道C只能取0.029?
知道为什么减出来有那么多小数吗? 本帖最后由 3mile 于 2010-11-23 22:24 编辑
回复 3# 330259789
浮点数是存储方式和其它不一样,它使用基数和指数两部分存储,因此计算时会出现
误差。
$A=2.60
$B=2.63
$C=0.03
If StringFormat('%.2f',$b-$A)>=$C Then MsgBox(0,"","真");================假 为什么一定要大于等于,用小于不好吗 回复 4# 3mile
恩,明白了,谢谢 回复 5# netegg
不能用小于的,只能用小于等于,不然等于的情况就不能判断了 本帖最后由 netegg 于 2010-11-24 18:05 编辑
($B-$A)>=$C 难道和NOT(($B-$A)<$c) 不一样吗?看来要重新学习逻辑了 回复 8# netegg
这样可以的,但不是复杂化了吗?没有大于等于来的简洁明了 本帖最后由 netegg 于 2010-11-24 19:57 编辑
Int(($b - $a)*100)/100
或者
Round(($b - $a)*100)/100 是个办法,谢啦
页:
[1]