【问题标题】:Issue with DecimalField, max_digits of django modelsDecimalField 的问题,django 模型的 max_digits
【发布时间】:2018-04-16 14:51:24
【问题描述】:

我已经在 models.py 中声明了下面的字段。

marks = models.DecimalField(max_digits=2, decimal_places=2, default=3.0)

在后端表结构是:

| Field | Type          | Null | Key | Default | Extra        |
| marks | float(3,1)    | NO   |     | 1.0     |              |

所以这里默认值 3.0 会尝试在后端保存为 3.00(小数位 = 2),并且没有空间存储左侧值 3 对吗?

对于上述情况,当我给出 max_digits=3 或 decimal_places=1 时,它正在工作。

请帮助我,从 django 到 mysql db flow 到底发生了什么?

【问题讨论】:

  • 你是否运行过makemigrations然后迁移?,检查迁移文件
  • 是的。我也做过迁移。

标签: python mysql django


【解决方案1】:

DecimalField 接受 max_digits 的参数,这是十进制数字的总位数,decimal_places 是小数位数。

如果将max_digits 定义为3,decimal_places 定义为2,则可以保存的最大数字为9.99。它有 3 位数字和 2 位小数。如果max_digits 是例如5,decimal_places 是2,你可以保存的最大数字是999.99。

在您的情况下,最多 2 位数字和 2 位小数是没有意义的,因为它不能存储 3.00,它有 3 位数字。因为 2 位数字已经被小数位占据,所以点之前的数字没有空格。因此,您可以节省的最大数字是 0.99。

【讨论】:

    【解决方案2】:

    这些是 max_digits 和 decimal_places 的定义

    max_digits 值中允许的最大位数(小数点前加上小数点后,去掉前导零)。

    decimal_places 允许的最大小数位数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-04
      • 2015-09-06
      • 1970-01-01
      • 2016-10-23
      • 2018-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多