避免影响条件的二进制舍入错误的最佳方法是什么?
What's the best way to avoid binary rounding errors affecting conditions?
我在我的部分代码中注意到了这种奇怪的行为:
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
之类的。
我只是想知道在条件语句中避免此类错误的最佳方法是什么?
当然四舍五入:
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
我在我的部分代码中注意到了这种奇怪的行为:
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
之类的。
我只是想知道在条件语句中避免此类错误的最佳方法是什么?
当然四舍五入:
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