MySQL 分为两种方式:浮点数和定点数。浮点数包括 float(单精度)和 double(双精度),而定点数则只有 decimal 一种表示。
定点数在 MySQL 内部以字符串形式存放,比浮点数更精确,适合用来表示货币等精度高的数据。
浮点数和定点数都可以用类型名称后加“(M,D)”的方式来进行表示,“(M,D)”表示该值一共显示 M 位数字(整数位+小数位),其中 D 位位于小数点后面,M 和 D 又称为精度和标度。
例如,定义为 float(7,4)的一个列可以显示为-999.9999。
MySQL 保存值时进行四舍五入,因此如果在 float(7,4)列内插入 999.00009,近似结果是 999.0001。
值得注意的是,浮点数后面跟“(M,D)”的用法是非标准用法,如果要用于数据库的迁移,则最好不要这么使用。
float 和 double 在不指定精度时,默认会按照实际的精度(由实际的硬件和操作系统决定)来显示,
而 decimal 在不指定精度时,默认的整数位为 10,默认的小数位为 0。
CREATE TABLE `t1` (
`id1` float(5,2) default NULL,
`id2` double(5,2) default NULL,
`id3` decimal(5,2) default NULL
)
insert into t1 values(1.23,1.23,1.23);
insert into t1 values(1.234,1.234,1.23);
insert into t1 values(1.234,1.234,1.234);