一种简单的方法可能是继承 DecimalField 并更改其格式。
from django.db.models.fields import DecimalField
class NonscientificDecimalField(DecimalField):
def format_number(self, value):
"""
Overrides DecimalField's usual format_number by making sure
that the result is never in exponential notation for zero.
"""
if value == 0:
return "0.00000000"
else:
return super(DecimalField, self).format_number(value)
顺便说一句,您不应该将此作为 Django 错误提交 - 这是 Python 小数的工作方式,与 Django 几乎没有关系。打开一个shell并尝试str(Decimal("0.00000000"))
,你会看到Decimal('0E-8')
。
如果你想10.50000000
显示为10.5
,你可以调用normalize
你的小数。这也将解决您的0E-8
问题:
import decimal
from django.db.models.fields import DecimalField
class NonscientificDecimalField(DecimalField):
def format_number(self, value):
"""
Overrides DecimalField's usual format_number to remove trailing zeroes.
"""
if isinstance(value, decimal.Decimal):
context = decimal.Context(prec=self.max_digits)
value = value.normalize(context=context)
return super(DecimalField, self).format_number(value)