【发布时间】:2013-05-13 20:16:19
【问题描述】:
我尝试将 DECIMAL 与 (2,2) 一起使用,但它不允许我使用它。
我只想存储一个数字,例如 7.50 或 10.50。我需要保留小数点后的两个数字,但是当我刷新数据库时,它会将值重置为 0.99。有什么建议吗?
【问题讨论】:
标签: mysql
我尝试将 DECIMAL 与 (2,2) 一起使用,但它不允许我使用它。
我只想存储一个数字,例如 7.50 或 10.50。我需要保留小数点后的两个数字,但是当我刷新数据库时,它会将值重置为 0.99。有什么建议吗?
【问题讨论】:
标签: mysql
DECIMAL 声明的第一个参数是 total 位数。您可能想使用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 位在小数点后。
即
小数点前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
【讨论】: