python十进制奇怪的句柄,以及如何获取最接近的十进制浮点数?

时间:2018-11-16 01:02:17

标签: python floating-point decimal rounding

奇怪的结果是

In [46]: Decimal(1.1).quantize(Decimal('.1'), rounding=ROUND_UP)
Out[46]: Decimal('1.2')

In [47]: Decimal(1.1).quantize(Decimal('.1'), rounding=ROUND_HALF_UP)
Out[47]: Decimal('1.1')

In [48]: Decimal(3.65).quantize(Decimal('.1'), rounding=ROUND_UP)
Out[48]: Decimal('3.7')

In [49]: Decimal(3.65).quantize(Decimal('.1'), rounding=ROUND_HALF_UP)
Out[49]: Decimal('3.6')

但是我想要这个:

In [47]: Decimal(1.1).quantize(Decimal('.1'), rounding=Somthing)
Out[47]: Decimal('1.1')

In [48]: Decimal(3.65).quantize(Decimal('.1'), rounding=Somthing)
Out[48]: Decimal('3.7')

这意味着我想获得最接近的浮动。

1 个答案:

答案 0 :(得分:3)

问题是您正在将float的值提供给Decimal,这会导致浮点精度错误。输入字符串可以解决问题:

print(Decimal(str(1.1)).quantize(Decimal('.1'), rounding=ROUND_UP))

Decimal('1.1')

print(Decimal(str(3.65)).quantize(Decimal('.1'), rounding=ROUND_UP))

Decimal('3.7')

具体地说,我们发现:

Decimal(1.1) == Decimal('1.100000000000000088817841970012523233890533447265625')