避免二进制舍入错误影响条件的最佳方法是什么?

时间:2018-08-23 01:54:32

标签: python python-2.7 floating-point floating-accuracy

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

if(isset($_POST['exampleButton'])) {
    echo "true";
}

我认为这是由于二进制舍入错误所致,因此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或其他形式。 我只是想知道在条件语句中避免此类错误的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

当然四舍五入:

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