MySQL的浮点和定点介绍
备注:本文修订于2020年6月6日
1、浮点数和定点数的介绍:存储形式
MySQL的数字数据类型分为四种:位数据类型、整数数据类型、定点数据类型和浮点数据类型。每种数字类型又分为多种常用的数据类型。本文主要讲述一下定点数据类型和浮点数据类型。
对于带小数点的数据类型,MySQL分为两种方式:浮点数和定点数。浮点数包括 float(单精度)和 double(双精度),而定点数则只有 decimal 一种表示。定点数包括 decimal 以及同义词 numeric,定点数的整数位和小数位分别存储。
因为定点数在 MySQL 内部以字符串形式存放,比浮点数更精确,适合用来表示货币等精度高的数据。
2、浮点数和定点数的表示和精度问题
MySQL 浮点型和定点型可以用类型名称后加(M,D)来表示,M表示该值的总共长度,D表示小数点后面的长度,M和D又称为精度和标度,如float(5,2)可显示为999.99,MySQL保存值时会进行四舍五入,如果插入999.009,则结果为999.01。
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);
float和double在不指定精度时,默认会按照实际的精度来显示,而decimal在不指定精度时,默认整数为10,小数为0。
3、思考
MySQL 浮点型和定点型可以用类型名称后加(M,D)来表示,M表示该值的总共长度,D表示小数点后面的长度。为什么不用M表示小数点的前面的长度呢?如果这样做的话,那么D是不可以省略的。相反,如果用M表示该值的总共长度,则D是可以省略的。
4、延伸
最后,我感觉一定要与css float里面的浮点相关联,这样让float的思维空间更大,更容易记忆,毕竟神经元是网状结构的。