Python float 到 int 的转换

新手上路,请多包涵

基本上,我将浮点数转换为整数,但我并不总是有预期值。

这是我正在执行的代码:

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。

原文由 B. Richard 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 442
1 个回答
2.51 * 100 = 250.999999999997

int() 函数只是截断小数点后的数字,得到 250。使用

int(round(2.51*100))

得到 251 作为整数。通常,浮点数不能精确表示。因此,应注意舍入误差。如前所述,这不是特定于 Python 的问题。这是所有计算机语言中反复出现的问题。

原文由 Pascal Bugnion 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题