python decimal precision和django DecimalField

use*_*803 2 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?
Run Code Online (Sandbox Code Playgroud)

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

value = models.DecimalField(max_digits=10, decimal_places=3)
Run Code Online (Sandbox Code Playgroud)

它是否提供与设置相同的结果

getcontext().prec = 3
Run Code Online (Sandbox Code Playgroud)

为十进制?

wan*_*tel 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.