简体   繁体   English

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

[英]python decimal strange handle and how to get the closest one decimal float?

The strange result is 奇怪的结果是

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')

But I want this: 但我想要这个:

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')

Which mean I want to get closest float. 这意味着我想得到最近的浮动。

The problem is you are feeding float values to Decimal , which is subject to floating point precision errors. 问题是您正在将float值提供给Decimal ,这会受到浮点精度错误的影响。 Feeding a string removes the problem: 提供字符串可以解决问题:

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')

Specifically, we find: 具体来说,我们发现:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM