330259789 发表于 2010-11-23 21:22:29

(已解决)>=符号对于末尾带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,"","真")===============真

为什么啊?怎么让第一条测试为真?哪里出问题了?

lixiaolong 发表于 2010-11-23 21:57:26

看看下面的结果.
$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

330259789 发表于 2010-11-23 22:08:28

回复 2# lixiaolong
刚才我也试过了,是这样的。
这样的话我不是不能和0.03比较了?难道C只能取0.029?
知道为什么减出来有那么多小数吗?

3mile 发表于 2010-11-23 22:20:18

本帖最后由 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,"","真");================假

netegg 发表于 2010-11-23 22:33:28

为什么一定要大于等于,用小于不好吗

330259789 发表于 2010-11-24 17:46:47

回复 4# 3mile

恩,明白了,谢谢

330259789 发表于 2010-11-24 17:48:11

回复 5# netegg

不能用小于的,只能用小于等于,不然等于的情况就不能判断了

netegg 发表于 2010-11-24 18:03:21

本帖最后由 netegg 于 2010-11-24 18:05 编辑

($B-$A)>=$C 难道和NOT(($B-$A)<$c) 不一样吗?看来要重新学习逻辑了

330259789 发表于 2010-11-24 18:11:42

回复 8# netegg

这样可以的,但不是复杂化了吗?没有大于等于来的简洁明了

netegg 发表于 2010-11-24 19:56:45

本帖最后由 netegg 于 2010-11-24 19:57 编辑

Int(($b - $a)*100)/100
或者
Round(($b - $a)*100)/100

330259789 发表于 2010-11-25 19:44:49

是个办法,谢啦
页: [1]
查看完整版本: (已解决)>=符号对于末尾带0的判断错误问题