python - 小数(0.19)会产生很长的数字吗?

标签 python django

我的模型:

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.190.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/

相关文章:

python - 如何循环遍历2个数组?

python - 从变量列表中提取变量名称

python - 如何将 OrientDB 与 Django 一起使用?

django - 为什么我的 React-Django 应用程序检测不到静态文件?

python - 字节码指令成本

python - 如何制作具有树形数据结构的 django 模型?

python - Pandas to_xml() 设置 xsi 值

python - django-rest-framework: __init__() 恰好接受 1 个参数(给定 2 个)

python - 新数据库上的南迁移

python - Django 不考虑夏令时