python decimal precision和django DecimalField

时间:2016-11-17 23:03:20

标签: python django floating-point decimal rounding

为什么我的精度错误?我在浮动点之后询问了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 个答案:

答案 0 :(得分:6)

  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