Python DecimalField将零转换为0E-10
Django 1.6、Python 2.7.5+、PostgreSQL 9.1、Linux 我在模型中定义了几个十进制字段,如下所示:Python DecimalField将零转换为0E-10,python,django,postgresql,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
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
保存为值时,通过管理界面
那么,为什么它不存储并显示一个零呢
文档中没有指定是强制使用小数点还是最大值
此显示是否因为需要10个位置?如果是这样,在我看来,使用默认表单小部件TextInput
,它应该扩展到该大小,或者至少滚动到该大小
在PostgreSQL中,它存储为
0.0000000000
我也遇到了这个问题,并发现实际上一切都正常工作。在Python中,如果您实际定义了类似以下内容的Decimal(“0.0000000000”)
,您将在控制台中看到:
>>> Decimal("0.0000000000")
Decimal('0E-10')
在我的情况下,我正在从SQLite3后端转换到PostgreSQL进行生产。在SQLite中一切都很好,因为它没有显式地显示(或存储)所有十进制数字。因此,如果您在SQLite编号字段中插入0
,然后选择它,您将得到0
但是,如果在PostgreSQL数字字段中插入0
,它将在小数点上填充零,然后插入0.0000000000
。因此,当Python将其放在十进制中时,您将看到Decimal(“0E-10”)
更新-在Django 1.8中修复了问题问题似乎出现在postgres后端或Psycopg 2.5.2适配器中。。。我也有同样的问题,postgres中的数据是0.00000000,但当django获取时,它显示为十进制(“0E-8”)(shell访问不仅是admin),如果我切换到sqlite3后端,那么它工作得很好,但是为了完整性,发布问题的解决方案。是的,Django将字段内容存储为decimal.decimal对象。在模板中,或者如果要写入文件(我需要这样做),则需要使用格式化选项。使用以前使用的模型字段的示例:str('%.10g'%self.min_包括在内).strip()这将删除所有非有效零。提示:在模板中,您可以使用
{{{value | floatformat}}
获得小数的合理输出。