Objective C - iOS - 奇怪的fmod()行为

时间:2011-07-29 12:23:18

标签: iphone objective-c ios modulus

有人可以帮我解释一下吗?您可以在Google中输入相同的数字,并获得与我在代码中获得的相同结果....

1089.80 % 0.04 = 0
1089.84 % 0.04 = 0.04 - Surely this is wrong? 0.04 goes into 1089.84 with no remainder.
1089.88 % 0.04 = 0
1089.92 % 0.04 = 0

对于看似正确的其他数字,也会出现类似的行为。

提前致谢!

2 个答案:

答案 0 :(得分:4)

您正在查看舍入值。在内部,这个数字不是1089.84,而是像1089.84000026。

如果你想要“正确”值,将两边乘以100,加0.5和(int)它们,然后取整数mod,并将结果转换回浮点数。

答案 1 :(得分:3)

实际上,0.04进入1089.84而没有余数。但是,这不是您要求计算机为您执行的计算。

1089.84和0.04都不能表示为浮点数。因此,每个双精度文字都四舍五入到最接近的可表示值。你实际在计算的是:

1089.839999999999918145476840436458587646484375 % 0.040000000000000000832667268468867405317723751068115234375

正是

0.039999999999895459457111002166129765100777149200439453125

当你打印结果时,它会被舍入到几个小数位以供显示,所以你看到0.04。