【发布时间】:2021-05-18 06:24:25
【问题描述】:
a = 310.97
b = 233.33
sum= 0.0
for i in [a,b]:
sum += i
print(sum)
py2 o/p: 544.3
py3 o/p: 544.3000000000001
有什么方法可以报告 py3 输出与 py2 相同的未来化?不使用四舍五入?
【问题讨论】:
a = 310.97
b = 233.33
sum= 0.0
for i in [a,b]:
sum += i
print(sum)
py2 o/p: 544.3
py3 o/p: 544.3000000000001
有什么方法可以报告 py3 输出与 py2 相同的未来化?不使用四舍五入?
【问题讨论】:
您可以在执行操作之前将值转换为整数,然后除以常数,例如在这种情况下为 100.0。
a = 310.97
b = 233.33
c = int(a * 100)
d = int(b * 100)
sum = 0
for i in [c,d]:
sum += i
result = sum / 100.0
print(result) # 544.3
差异的原因在于两个版本的 Python 中浮点到字符串的转换精度。
a = 310.97
b = 233.33
sum = 0.0
for i in [a,b]:
sum += i
print("{:.12g}".format(x)) # 544.3
有关详细信息,请参阅此答案:Python format default rounding when formatting float number
【讨论】: