我正在尝试创建一个包含许多小数的浮点值。 我的桌子
CREATE TABLE number_type_check (
id INT(10) NULL DEFAULT NULL,
floatNumber FLOAT(18,5) NULL DEFAULT NULL
)
当我运行查询时:
INSERT INTO number_type_check (floatNumber) VALUES (987654321.98765);
它返回987654336.00000
而不是987654321.98765
答案 0 :(得分:1)
这是FLOAT常见的四舍五入问题。您得到一个4字节单精度FLOAT列,因为您的精度值小于24.您不能指望这样一个4字节单精度列的14位精度,请参阅Single precision floating point format
MySQL也支持这种可选的精度规范,但是 精度值仅用于确定存储大小。一个精度 从0到23导致4字节单精度FLOAT列。一个 从24到53的精度导致8字节双精度DOUBLE 列。
[...]
MySQL在存储值时执行舍入,因此如果插入则执行舍入 999.00009进入FLOAT(7,4)栏,大致结果为999.0001
来源:Floating-Point Types (Approximate Value) - FLOAT, DOUBLE
如果您需要更高的精度,请使用DECIMAL或DOUBLE。
查看this demo。