首页 > 解决方案 > 避免影响条件的二进制舍入错误的最佳方法是什么?

问题描述

我在我的部分代码中注意到了这种奇怪的行为:

num = 0.14
num += 0.01

if num == 0.15:
    print('equal')
elif num > 0.15:
    print('greater')
elif num < 0.15:
    print('less')

> greater

我认为这是因为二进制舍入错误,所以num实际上存储为0.1500000000001或其他东西。我只是想知道在条件语句中避免此类错误的最佳方法是什么?

标签: pythonpython-2.7floating-pointfloating-accuracy

解决方案


当然四舍五入:

num = 0.14
num += 0.01
num=round(num,2)
if num == 0.15:
    print('equal')
elif num > 0.15:
    print('greater')
elif num < 0.15:
    print('less')

输出:

equal

更好decimal的模块:

from decimal import Decimal
num = Decimal('0.14')
num += Decimal('0.01')
num=float(num)
if num == 0.15:
    print('equal')
elif num > 0.15:
    print('greater')
elif num < 0.15:
    print('less')

输出:

equal

当然,比较decimal.Decimal类型:

from decimal import Decimal
num = Decimal('0.14')
num += Decimal('0.01')
if num == Decimal('0.15'):
    print('equal')
elif num > Decimal('0.15'):
    print('greater')
elif num < Decimal('0.15'):
    print('less')

输出:

equal

推荐阅读