MySQL JSON存储不同的浮点值

时间:2018-03-05 21:36:18

标签: mysql json floating-point

如何在MySQL(5.7)中舍入JSON数据列中的浮点值?

我无法找到一个好的资源来了解如何解决我的问题。

以下是发生的事情:

CREATE TABLE someTable (jdoc JSON);
INSERT INTO someTable VALUES('{"data":14970.911769838869}');

然后选择行:

SELECT * from someTable;

我用不同的最终数字获取数据: '{"data": 14970.911769838867}'

知道为什么会这样吗?我可以通过某种方式调整数据以防止这种情况发生,还是存在舍入精度问题?

1 个答案:

答案 0 :(得分:2)

双精度浮点有大约16位精度的十进制数字。您的号码有17位数字,因此无法用浮点表示,并且在最后一位数字中会出现舍入误差。

请参阅How many significant digits have floats and doubles in java?

问题是关于Java,但几乎所有内容都使用相同的IEEE 754浮点格式,所以答案非常适用。