number = 9.3
while number % 0.5 != 0:
number -= 0.1
print number
-20.0
我预计数字最终将这个while循环保留为9.0,但不知怎的,它已经变成了-20.0。请注意,如果我将数字更改为9.2,它就像我期望的那样工作并变为9.0。有些值的工作原理是9.0,9.7,有些则不是9.4,9.8。我不知道为什么。顺便说一下9.8变成了-1204.5,这更奇怪了。我无法解释这些结果。请原谅我,如果我错过了一些基本的东西,因为我刚开始学习计算机编程。
答案 0 :(得分:0)
这是因为浮点精度。如果您在循环中打印number
和number % 0.5
,您将获得类似的内容:
9.2 0.2
9.1 0.1
9.0 1.7763568394e-15 # Not equal to 0!
8.9 0.4
8.8 0.3
8.7 0.2
8.6 0.1
8.5 3.5527136788e-15 # Still different from 0!
...
当number
达到-20时,解决方案是准确的:
-20.0 0.0
你应该做的是,而不是用0检查相等,检查结果是否足够小:
EPSILON = 0.0001
number = 9.3
while number % 0.5 > EPSILON:
number -= 0.1
print number
结果将是9.0
。
但是如果你想要一个不涉及循环的清洁解决方案,这将始终有效:
import math
number = 0.5 * math.floor(2.0 * number)