mysql浮点数据返回不同的值

时间:2014-09-22 14:50:15

标签: php mysql

我正在尝试创建一个包含许多小数的浮点值。 我的桌子

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

1 个答案:

答案 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