【问题标题】:py2 vs py3 addition output difference in float format浮点格式的py2 vs py3加法输出差异
【发布时间】: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 相同的未来化?不使用四舍五入?

【问题讨论】:

    标签: python-3.x python-2to3


    【解决方案1】:

    您可以在执行操作之前将值转换为整数,然后除以常数,例如在这种情况下为 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

    【讨论】:

    • 我可以在最后做简单的 round(sum, 2) .. 但我想知道未来我们是否可以解决这个问题.. 感谢 rply
    • Python 2 在执行字符串转换时会截断值。我已经添加了一个链接到我的答案中来解释它。
    猜你喜欢
    • 1970-01-01
    • 2020-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多