python - 如何让 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 真的很犀利。他看到了我的问题并立即知道(在“量化...”编辑之前)问题出在哪里。谢谢!
解决方案
代替:
a = 0.1601
Decimal(a)
我用了:
a = '0.1601'
Decimal(a)
将其定义为 a string
,并Decimal
准确反映该值。我希望这可以帮助别人。
推荐阅读
- java - 我的插入排序有什么问题
- geode - spring boot 数据 geode 放入区域导致重复的小写 PDX 元素
- python - 使用扩张因果卷积和 Tensorflow 2.0 的时间序列预测
- php - Laravel:“强制”查询构建器返回空列表
- javascript - 试图简化这个功能,所以我不必运行它 9 次
- powerbi - 分页报告 - 将所有单个过滤器值分别导出为 pdf
- javascript - 我可以使用闭包来保存在功能范围内声明的路由器吗?
- javascript - 由于使用私有名称,不会发出声明
- google-cloud-platform - 如果您在 Gsuite 上注册了高级保护计划,如何修复错误 400(OAuth2 错误)?
- java - 无法从嵌套对象中获取属性