Python Decimal分区给出了意想不到的答案

问题描述 投票:0回答:2

我不明白十进制除法背后的逻辑:

from decimal import *
getcontext().prec = 2

这非常有效:

>>> Decimal("11") / 2
 Decimal('5.5')

但这已经不是:

>>> Decimal("21") / 2
Decimal('10')

为什么不是“10.5”?...

python-3.x decimal
2个回答
0
投票

在你的情况下,这是因为精度不足。值分别舍入为Decimal上下文的“舍入”属性。

如python docs中所述,十进制上下文精度在算术运算期间起作用。精度确定计算的准确性。这意味着根据精度值可能会有不同的结果。

Quote from python doc

广泛不同的结果表明精度不足,舍入模式问题,病态输入或数值不稳定的算法。

因此,您唯一需要做的就是增加小数精度值。默认情况下,它等于28。


0
投票

十进制的上下文prec会考虑数字中的所有数字,而不仅仅是小数点后面的数字。

所以,5.5有两位数,10也是如此。如果要查看10.5,则必须将精度设置为3位数。

© www.soinside.com 2019 - 2024. All rights reserved.