【发布时间】:2011-09-28 00:16:41
【问题描述】:
基本上,我将浮点数转换为整数,但我并不总是有预期值。
这是我正在执行的代码:
x = 2.51
print("--------- 251.0")
y = 251.0
print(y)
print(int(y))
print("--------- 2.51 * 100")
y = x * 100
print(y)
print(int(y))
print("--------- 2.51 * 1000 / 10")
y = x * 1000 / 10
print(y)
print(int(y))
print("--------- 2.51 * 100 * 10 / 10")
y = x * 100 * 10 / 10
print(y)
print(int(y))
x = 4.02
print("--------- 402.0")
y = 402.0
print(y)
print(int(y))
print("--------- 4.02 * 100")
y = x * 100
print(y)
print(int(y))
print("--------- 4.02 * 1000 / 10")
y = x * 1000 / 10
print(y)
print(int(y))
print("--------- 4.02 * 100 * 10 / 10")
y = x * 100 * 10 / 10
print(y)
print(int(y))
这是结果(第一个值是操作的结果,第二个值是相同操作的 int()):
--------- 251.0
251.0
251
--------- 2.51 * 100
251.0
250
--------- 2.51 * 1000 / 10
251.0
251
--------- 2.51 * 100 * 10 / 10
251.0
250
--------- 402.0
402.0
402
--------- 4.02 * 100
402.0
401
--------- 4.02 * 1000 / 10
402.0
401
--------- 4.02 * 100 * 10 / 10
402.0
401
2.51 和 4.02 是导致 2.50 -> 5.00 范围内奇怪行为的唯一值。当给定相同的操作时,该范围内的每隔两个数字值转换为 int 没有任何问题。
那么,我错过了什么导致这些结果?顺便说一下,我使用的是 Python 2.7.2。
【问题讨论】:
-
浮点值不能精确地表示小数。这不是 Python 的事情。
-
虽然其他人解释了为什么会发生这种情况,但我想展示我的解决方法来获得对浮点错误有一定容忍度的地板舍入
nfloor = lambda x: round(x * 10**8) // 10**8
标签: python floating-point int