如 float x = 0.01999999999
用nslog输出是 0.02
例:要求对2个值进行0.02的超差判定 |
應該是條件代碼問題,你設置一個斷點,把每一步的結果show出來看一下結果。。。
double的类型的存储比较特殊,你可以查看相关资料,虽然你给的是0.02的值,但是内存中可能是0.019999999999999
这点我了解,但是为什么通过str和float的2次转换就不出现这个问题了哈?
不是代码问题,应该是2楼说的0.0199999999999的问
FieldByName(x[0]).AsCurrency -FieldByName(x[1]).AsCurrency
如果是货币的还是用这个AsCurrency这个比较好把,我比较喜欢用value这个。
其实我需要解释 strtofloat(Floattostr(cal)) 这个。。。
Floattostr(cal)根据本地设置(通常是小数点8位),已经做了精度调整。
然后再 StrToFloat 得到的值,自然跟 cal 有所区别。
还有,real 我记得没错的话,就是 single 吧。
single 是8位有效(含小数点前面的位数),8位之外的,就是随便什么数字都有可能。
可以用 Double 试试看,这个直接玩 16 位,相对来说准确多了。