DecimalField将Zero转换为0E-10

时间:2014-01-08 15:39:52

标签: python django postgresql

Django 1.6,Python 2.7.5 +,PostgreSQL 9.1,Linux。

我在模型中定义了几个十进制字段,如下所示:

min_inclusive = models.DecimalField(_('minimum inclusive'), max_digits=19,
                    decimal_places=10,
                    help_text=_("Enter the minimum (inclusive) value for this concept."),
                    null=True, blank=True)

当我输入0(零)并通过管理界面保存对象时,我得到0E-10作为值。

那么,为什么不只是存储和显示零?

文档未指定强制decimal_places或是否为最大数量。

此显示是因为10个地方必需?如果是这样,使用默认表单小部件TextInput,在我看来应该只扩展到该大小或至少滚动到该大小。

在PostgreSQL中,它存储为0.0000000000

1 个答案:

答案 0 :(得分:10)

我也遇到了这个问题并发现实际上一切正常,如果你真的定义了这样的Decimal("0.0000000000"),你会在控制台Decimal("0E-10")

中看到这个
>>> Decimal("0.0000000000")
Decimal('0E-10')

在我的情况下,我正在从 sqlite3 后端转换为 Postgres 进行制作,一切都在sqlite中正常工作,因为它没有明确显示(或存储)所有小数如果您在sqlite数字字段中插入0,则为数字。如果您选择它,它将返回0

但是如果你在 Postgres 数字字段中插入0,它将对小数点进行零填充并插入0.0000000000所以当python将它放入十进制时你会见Decimal("0E-10")

更新 - 在Django 1.8中修复

相关问题