在Delphi6或Delphi 2010中,声明两个Currency类型的变量(vtemp1,vtemp2),并为它们提供0.09的值.使用ABS功能嵌入其中一个变量并将其与另一个进行比较.当编译器监视显示abs(vtemp1)和vtemp2的相同值时,您可能希望比较产生正结果.奇怪的是if语句失败了!
注意: - 只有在处理数字0.09时才会遇到此问题(尝试其他几个接近的值显示正常结果) - 将变量解释为Double而不是货币,问题就不复存在了.
AFAIK,Delphi Win32中的货币类型取决于处理器浮点精度.因此,在比较两个货币值时,我遇到了舍入问题,根据机器返回不同的结果.
现在我使用SameValue函数传递Epsilon参数= 0.009,因为我只需要2位十进制数字.
有没有更好的方法来避免这个问题?