我正在做一些编码,并突然想到了一个奇怪的floor()行为。导致错误的那条线在下面提到:
printf("%f",floor(310.96*100));
,输出为31095.0000
。
为什么会这样?
答案 0 :(得分:1)
这是典型的floating point issue。常量值310.96
不能作为浮点数表示。相反,最接近的浮点值表示为310.9599914550781
。
你可以尝试自己here。将100
乘以floor()
并将其截断后会产生31095.0000
答案 1 :(得分:0)
浮点数不是100%精确310.96 * 100可能会导致31095.99999999 ...因此您的结果,另见this