11.1.4 浮点类型(近似值)-FLOAT,DOUBLE
FLOAT
和DOUBLE
类型 table 示近似数字数据值。 MySQL 将四个字节用于单精度值,并将八个字节用于双精度值。
对于FLOAT
,SQL 标准允许在括号中的关键字FLOAT
后面的位中指定精度(而不是指数的范围)的可选规范; ;即FLOAT(p)。 MySQL 也支持此可选的精度规范,但是FLOAT(p)中的精度值仅用于确定存储大小。从 0 到 23 的精度导致 4 字节单精度FLOAT
列。从 24 到 53 的精度将导致 8 字节双精度DOUBLE
列。
MySQL 允许使用非标准语法:FLOAT(M,D)
或REAL(M,D)
或DOUBLE PRECISION(M,D)
。在此,(M,D)
table 示最多可以存储* M
个数字,其中 D
*个数字可能在小数点后。例如,显示为FLOAT(7,4)
的列将看起来像-999.9999
。 MySQL 在存储值时执行舍入,因此,如果将999.00009
插入FLOAT(7,4)
列,则近似结果为999.0001
。
由于浮点值是近似值而不是作为精确值存储的,因此在比较中尝试将它们视为精确值可能会导致问题。它们还受平台或实现依赖性的约束。有关更多信息,请参见第 B.4.4.8 节“浮点值的问题”
为了获得最大的可移植性,需要存储近似数字数据值的代码应使用FLOAT
或DOUBLE PRECISION
,且不指定精度或位数。