MySQL JSON存储不同的浮点值

标签 mysql json floating-point

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

我无法找到合适的资源来解决我的问题。

发生的情况是这样的:

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

然后选择行:

SELECT * from someTable;

我用不同的最终数字返回数据: '{“数据”:14970.911769838867}'

知道为什么会发生这种情况吗?我可以通过调整数据来防止这种情况发生吗?或者是否存在舍入精度问题?

最佳答案

double float 的精度约为 16 位小数。您的数字有 17 位,因此无法精确地用 float 表示,并且最后一位数字会出现舍入错误。

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

问题是关于 Java 的,但几乎所有东西都使用相同的 IEEE 754 浮点格式,因此答案非常普遍。

关于MySQL JSON存储不同的浮点值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49119871/

相关文章:

mysql - Join 和 Group by Clause 给出了错误的输出

mysql - 在 mySQL 多 select 语句上加入不同的 WHERE 子句

php - PHP 和 SQL 中日期的转换

c# - 无法使用 Headers ["Content-Type"] = "application/x-www-form-urlencoded"在我的 WebClient UploadString 中对我的 JSON 对象进行编码

java - Java 中对 NaN 的困惑

php - 如何根据年底将月份和年份存入数据库

javascript - 如何在 React post 方法调用中传递带有表示数字数据类型的值的 json 属性

python - 使用 Python 将 JSON 数据漂亮地打印到文件中

ruby - 比较 rspec 中的 float 时的奇怪行为

floating-point - 为什么使用==时tcl中的1.0不等于1.0