DecimalField问题,django模型的max_digits

时间:2017-11-03 19:22:56

标签: python mysql django

我在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数据库流程究竟发生了什么?

2 个答案:

答案 0 :(得分:2)

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。

答案 1 :(得分:0)

这些是max_digits和decimal_places的定义

max_digits 值中允许的最大位数(小数点之前的数字加上小数点之后的数字,中间去除了前导零)。

decimal_places 允许的最大小数位数。