我已经尝试将 DECIMAL 与 (2,2) 一起使用,但它不会让我使用它。
我只是想存储一个数字,例如 7.50 或 10.50。我需要保留小数点后的两个数字,但是当我刷新数据库时,它会将值重置为 0.99。有什么建议么?
我已经尝试将 DECIMAL 与 (2,2) 一起使用,但它不会让我使用它。
我只是想存储一个数字,例如 7.50 或 10.50。我需要保留小数点后的两个数字,但是当我刷新数据库时,它会将值重置为 0.99。有什么建议么?
DECIMAL
声明的第一个参数是总位数。您可能想使用DECIMAL (4, 2)
. 这允许小数点前最多两位数和小数点后两位数。
文档:https ://dev.mysql.com/doc/refman/5.7/en/precision-math-decimal-characteristics.html
语法为 DECIMAL(M,D)
M - 总长度
D - 小数点右边的数字
http://dev.mysql.com/doc/refman/5.6/en/fixed-point-types.html
DECIMAL 列的声明语法是 DECIMAL(M,D)。MySQL 5.6 中参数的取值范围如下:
M 是最大位数(精度)。它的范围是 1 到 65。(旧版本的 MySQL 允许的范围是 1 到 254。)
D 是小数点右侧的位数(刻度)。它的范围是 0 到 30,并且不能大于 M。
CREATE TABLE IF NOT EXISTS `table_name` (`id` int(11) NOT NULL AUTO_INCREMENT,`cost` DECIMAL( 10, 2 ) NOT NULL);
这将使成本列共有 10 位数字,小数点前 8 位和小数点后 2 位。
CREATE TABLE `salary` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`salary` DECIMAL(10,2) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
DECIMAL(10,2)
表示salary
总共有 10 位数字,其中 2 位在小数点后。
IE
小数点前 8 位和小数点后 2 位。
DECIMAL 列的声明语法是 DECIMAL(M,D)。参数的取值范围如下:
- M 是最大位数(精度)。它的范围是 1 到 65。
- D 是小数点右侧的位数(刻度)。它的范围是 0 到 30,并且不能大于 M。
注意:- M 是总数。小数点前位数+总数 小数点后的位数。
在您的情况下,7.50
总共有 3 位数字,10.50
总共有 4 位数字。但宣布的最大数量。该列的位数为 2,因此它最多可以存储两位数的值。您甚至不能存储 1,因为它是 1.00,即总共 3 位数字。因此,该列中允许的最大 2 位数值为.99
。
如果要存储 xx.xx,则必须声明 (4, 2),其中 4 是 M,2 是 D。
如果你想以 mysql 的最大允许大小存储任何数字,那么你可以用 (65, 30) 声明一个列。
最大数量 小数点前的位数 = M - D
将您的字段从 INT 更改为 FLOAT