python 小数精度和 django DecimalField

标签 python django floating-point decimal rounding

为什么我在这里得到错误的精度?我在 float 后问了 3 位小数。

>>> from decimal import Decimal
>>> from decimal import getcontext

>>> getcontext().prec = 3
>>> Decimal(1.111) + Decimal(2.222)
Decimal('3.33') # Why not 3.333?

第二个问题,对于 django DecimalField,我这样定义我的字段:

value = models.DecimalField(max_digits=10, decimal_places=3)

是否给出与设置相同的结果

getcontext().prec = 3

十进制?

最佳答案

  1. prec 设置充当 max_digits 设置,因此如果您尝试将 200.222 和 300.333 的小数相加,您会立即发现问题。要获得恰好 3 位小数,您可以使用 round() 函数,例如 round(Decimal(123.3334343), 3)

  2. 第一部分实际上已经回答了这个问题,但只是为了澄清:
    max_digits 设置逗号前后总共可以有多少个数字。
    decimal_places 指定存储多少个小数位。
    因此,简短的回答是否定的:getcontext().prec = 3 != decimal_places=3

关于python 小数精度和 django DecimalField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40666627/

相关文章:

python - 分数取模。分数类

java - Apache Spark 如何将函数发送到引擎盖下的其他机器

django - 在 Amazon RDS 上安装 Kmeans PostgreSQL 扩展

python - 无法使用 ipython 笔记本内联绘图

python - 在同一 View 中处理两个表单

django - Ipdb 不显示 Django Nose 测试的输出

c - 缩放互补误差函数的精确计算,erfcx()

math - 为什么浮点运算在添加小数时不能给出准确的结果?

python - 使用参数 'quiz_change' '、 '(' 供应商/quiz/(?P<pk>[0-9]+)/$'] 反转 )' not found. 1 pattern(s) tried: ['

python - key 错误 : Creating a dataframe column using square root of the sum of square of two column values