python 小数精度和 django DecimalField
python decimal precision and django DecimalField
为什么我这里的精度不对?我在浮点数后问了 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
十进制?
prec
设置与 max_digits
设置相同,因此如果您尝试将 200.222 和 300.333 的小数相加,您会立即发现问题。要获得精确的 3 位小数,您可以使用 round()
函数 round(Decimal(123.3334343), 3)
。
第一部分实际上已经回答了这个问题,但只是为了澄清:
max_digits
设置逗号前后总共可以有多少个数字。
decimal_places
指定存储多少位小数。
因此简短的回答是否定的:getcontext().prec = 3
!= decimal_places=3
.
为什么我这里的精度不对?我在浮点数后问了 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
十进制?
prec
设置与max_digits
设置相同,因此如果您尝试将 200.222 和 300.333 的小数相加,您会立即发现问题。要获得精确的 3 位小数,您可以使用round()
函数round(Decimal(123.3334343), 3)
。第一部分实际上已经回答了这个问题,但只是为了澄清:
max_digits
设置逗号前后总共可以有多少个数字。
decimal_places
指定存储多少位小数。
因此简短的回答是否定的:getcontext().prec = 3
!=decimal_places=3
.