- 小数类型分为
浮点小数
和定点小数
。
- 浮点小数
- 浮点小数是“不精确的小数”,包括
float
和double
。float
:占用4字节存储空间,可称为“单精度浮点数”,约7位有效数字。double
:占用8字节存储空间,可称为“双精度浮点数”,约17位有效数字。
- 定点小数
- 浮点小数是“精确的小数”一一它通过内部技巧,突破了“有些小数无法用二进制精确表示”的局限。
- 其设定方式通常是这样的:
decimal(M, D);
其中M表示该小数总位数(包含小数点前后部分,最大长度65),D表示该小数的小数点后的位数。
- 使用效果
定义三个字段分别为 float、double 和 decimal 类型,并都插入数字 123456789.123456789123456789
显示结果,注意三者保留数值精度也不一样。
mysql> desc user; +-------+----------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+----------------+------+-----+---------+-------+ | x1 | float | YES | | NULL | | | x2 | double | YES | | NULL | | | x3 | decimal(23,14) | YES | | NULL | | +-------+----------------+------+-----+---------+-------+ mysql> insert into user (x1, x2, x3) values (123456789.123456789123456789, 123456789.123456789123456789, 123456789.123456789123456789); mysql> select * from user; +-----------+--------------------+--------------------------+ | x1 | x2 | x3 | +-----------+--------------------+--------------------------+ | 123457000 | 123456789.12345679 | 123456789.12345678912346 | +-----------+--------------------+--------------------------+