首页 > 解决方案 > 如何让 Decimal 正确反映价值?

问题描述

我需要对看起来像的数字执行许多数学运算104.950178- 即具有多个小数位。它的范围从小数点后 4 位到小数点后 8 位,偶尔有 10 位小数。

在大量阅读 Stack Overflow 之后,我明白我不应该使用float,而是使用Decimal,因为float它是以 2Decimal为底,是以 10 为底。有很多数学运算,float会给出错误的结果,这不是我想要的,所以我选择了Decimal.

一切正常,直到我遇到:

from decimal import *
Decimal(0.1601).quantize(Decimal('.0001'), rounding=ROUND_FLOOR) #returned Decimal('0.1600')

我需要准确地反映这些数字。您能否告知是否在 Python 3 中使用了另一个数字系统,或者是否有办法让 Decimal 以原样获取给定的数字而不改变其值?

注意:由于 Mark 的评论,我添加了代码的“量化...”部分,使其成为 MVCE。我认为输出是理所当然的,却忘记了Decimal我的这部分代码中的每一个都被处理为截断到小数点后 4 位。

尽管如此,@jonrsharpe 真的很犀利。他看到了我的问题并立即知道(在“量化...”编辑之前)问题出在哪里。谢谢!

标签: pythonpython-3.xfloating-pointdecimal

解决方案


代替:

a = 0.1601
Decimal(a)

我用了:

a = '0.1601'
Decimal(a)

将其定义为 a string,并Decimal准确反映该值。我希望这可以帮助别人。


推荐阅读