2014-09-22 67 views
0

我正在尝试创建一个带有许多小数的浮点值。 我的表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

+0

您可以提供您正在使用的“选择”或其他查询来检索值吗? – Grice 2014-09-22 14:58:30

回答

1

这是一个平常的四舍五入问题FLOAT。你得到一个4字节单精度浮点数列,因为你的精度值小于24,你不能指望从这样一个4字节燎精度列14位的精度,请Single precision floating point format

MySQL也支持此可选精度规格,但精度值仅用于确定存储大小。从0到23的精度为 会生成一个4字节的单精度FLOAT列。 A 从24到53的精度导致了一个8字节的双精度DOUBLE 列。
[...]
MySQL的执行,以便如果插入 999.00009成FLOAT存储值时,舍入,(7,4)柱,近似结果是999.0001

来源:Floating-Point Types (Approximate Value) - FLOAT, DOUBLE

如果您需要更高的精度,请使用DECIMAL或DOUBLE。

看看this demo