我的模型:
class Product(models.Model):
VAT_CHOICES = [
(Decimal(0.19), Decimal(0.19)),
(Decimal(0.07), Decimal(0.07)),
]
vat = models.DecimalField(
choices=VAT_CHOICES,
max_digits=12,
decimal_places=2,
default=Decimal(0.19))
将 0.19
解析为 十进制
数字会产生一个非常长的数字,大约有 20 位小数。我做错了什么以及避免这种情况的最佳方法是什么?
我总是需要写 e. G。 round(Decimal(0.19), 2)
以获得所需的数字?我想要精确的数字 0.19
。
最佳答案
正如评论已经指出的,您应该使用 str
而不是 float
作为 Decimal
构造函数的参数;发生错误的原因是 0.19
或 0.07
无法无损转换为具有 2 位小数的定点表示形式。阅读更多内容decimal
docs ,特别是将 float
解释为 Decimal
的参数。
所以你的模型可能看起来像这样:
class Product(models.Model):
VAT_CHOICES = [
(Decimal('0.19'), Decimal('0.19')),
(Decimal('0.07'), Decimal('0.07')),
]
vat = models.DecimalField(
choices=VAT_CHOICES,
max_digits=12,
decimal_places=2,
default=VAT_CHOICES[0][0])
我还使用了 VAT_CHOICES
作为 default
关键字以减少冗余。
关于python - 小数(0.19)会产生很长的数字吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57623787/