MySQL 中使用浮点数和定点数来表示小数。DECIMAL类型NUMERIC 存储精确的数值数据值。当需要保持准确的精度(例如货币数据)时,可以使用这些类型。浮点数是一种近似表示小数的数据类型,适用于具有广泛范围和精度要求不太高的计算。
定点类型(精确值)-DECIMAL、NUMERIC
浮点类型(近似值)-FLOAT、DOUBLE
规定小数点位置固定不变,称为定点数。小数点的位置不固定,可以浮动,称为浮点数。
浮点类型有两种,分别是单精度浮点数(FLOAT)和双精度浮点数(DOUBLE);定点类型只有一种,就是 DECIMAL(DECIMAL、NUMERIC、DEC同义)。
在计算机中,通常是用定点数来表示整数和纯小数,分别称为定点整数和定点小数。对于既有整数部分、又有小数部分的数,一般用浮点数表示。
浮点类型和定点类型都可以用(M, D)来表示,其中M称为精度,表示总共的位数;D称为标度,表示小数的位数。
浮点数类型的取值范围为 M(1~255)和 D(1~30,且不能大于 M-2)
![]() | 浮点数如果不写精度和标度,会按照实际精度值保存(由计算机硬件和操作系统决定),如果有精度和标度,则会自动将四舍五入后的结果插入,系统不会报错;定点数如果不写精度和标度,则按照默认值decimal(10,0) 来操作,如果数据超过了精度和标度值,系统会报错。 |
类型 | 大小 | 范围(有符号) | 范围(无符号) | 用途 |
---|---|---|---|---|
FLOAT | 4 Bytes | (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) | 0,(1.175 494 351 E-38,3.402 823 466 E+38) | 单精度 浮点数值 |
DOUBLE | 8 Bytes | (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 双精度 浮点数值 |
DECIMAL | M+2 个字节 | 依赖于M和D的值 | 依赖于M和D的值 | 小数值 |
![]() | REAL REAL默认就是 DOUBLE。如果你把 SQL 模式设定为启用“ REAL_AS_FLOAT ”,那么,MySQL 就认为 REAL 是 FLOAT。需要启用“REAL_AS_FLOAT” |