Adi*_*lik 7 python django postgresql django-models postgresql-9.3
我total_price在postgres数据库中有一个 django-field版本9.3.11。
这是它的当前代码。
total_value = models.DecimalField(decimal_places=100, default=0, max_digits=300)
我想将其转换为正确的小数点后两位。所以我写了这段代码
total_value = models.DecimalField(decimal_places=2, default=0, max_digits=10)
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
class Migration(migrations.Migration):
dependencies = [
('my_table', '0040_my_table_skipped'),
]
operations = [
migrations.AlterField(
model_name='my_table',
name='total_value',
field=models.DecimalField(default=0, max_digits=10, decimal_places=2),
),
]
Run Code Online (Sandbox Code Playgroud)
当我运行命令 python manage.py migrate
它向我展示了这个错误
A field with precision 10, scale 2 must round to an absolute value less than 10^8.
知道这是关于什么吗?
正如@sivakumar-r 上面提到的,这是精度和规模问题。
让我们看看它是如何Numeric(precision, scale)工作的:
假设,如果我们有一个用NUMERIC(10,3).
这意味着,我们总共只能保存 10 位数字,小数点后有 3 个空格。
所以在这种情况下你可以保存的范围是:+9999999.999 到 -9999999.999。
一种解决方案可能是:
更改表列以使用NUMERIC没有精度和小数位数的类型。
这将接受小数点前最多 131072 位数字;小数点后最多 16383 位。如 postgres:11 数字类型文档中所述。
小智 3
之前您有十进制数,例如 Number(300, 100)。我认为你在这个小数字段中有一些数据。现在将小数字段更改为 Number(10,2)。所以现在你最多只能存99999999.99。但你的旧数据远不止这些。因为之前您最多可以保存 300 位小数和 100 位小数。