Python 十进制和返回错误值

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

我使用十进制模块来避免浮点舍入错误。就我而言,这些值是金钱,所以我想要两位小数。

为了做到这一点,我做了

decimal.getcontext().prec = 2
,但后来我得到了一些令人惊讶的结果,这让我觉得我错过了一些东西。在此代码中,第一个断言有效,但第二个断言失败

from decimal import getcontext, Decimal

assert Decimal("3000") + Decimal("20") == 3020

getcontext().prec = 2

assert Decimal("3000") + Decimal("20") == 3020  # fails

由于

3000
20
是整数,所以我希望它成立,但我得到
3000
。对正在发生的事情有什么想法吗?

python fixed-point
1个回答
0
投票

decimal
不直接实现定点运算。它实现以 10 为基数的floating点算术。精度(
prec
)是保留有效数字的总数,与小数点的位置无关。

尝试显示上一个示例中的计算值:

>>> Decimal("3000") + Decimal("20")
Decimal('3.0E+3')

准确的结果 (3020) 将四舍五入到最高有效数字 2(因为您将

prec
设置为 2),因此后面的“20”将被丢弃。

例如,如果您想要小数点 2 位,则必须自行安排。在 the docs 中搜索问题“一旦我有了有效的两个位置输入,如何在整个应用程序中保持该不变性?”。

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