MySQL仅在数字较大时返回错误的值

时间:2018-11-06 23:07:07

标签: javascript mysql node.js floating-point floating-accuracy

我正在写一个具有存储值的机器人。其中之一是18个地方。我可以将值作为BIGINT [20]正确地存储到我的数据库MySQL中。存储的值正确。

尝试获取该号码时出现问题。存储在数据库中的值是502033097630416897,但是mysql返回的实际值是502033097630416900。为进行比较,这里再次是:

502033097630416900
502033097630416897

似乎返回值已被四舍五入或已更改。我想检验这一理论,所以我将存储在MySQL中的值更改为较小的数字123、1234567,依此类推。返回的值实际上是正确的。由于某些原因,如果存储在MySQL中的数字太大,则返回的值不正确。我会发布用于存储的代码,但由于存储的实际值正​​确,因此我认为这无关紧要。

至于调用,我有一个可以获取多个return new的函数

Promise((success, fail) => {
    con.query(`SELECT * FROM serversettings WHERE serverId = ${serverID}`, (err, rows) => {
        switch(type){
            case "onjoin":
                success(rows[0].onjoin);

类型是我要提取的数据。任何见解都会有所帮助,谢谢!

1 个答案:

答案 0 :(得分:0)

JavaScript使用64-bit IEEE 754 floating point数字进行算术运算。用这种算术,您的示例中的两个数字彼此相等。 IEEE 754仅提供约16位十进制数字。

要使用Javascript处理这些数字,您必须像使用文本字符串一样使用它们,或使用长数字包。

如果您将查询更改为

SELECT CAST(bigint_column AS CHAR) bigint_column, other, else, etc
  FROM serversettings 
  ...

您将获得字符串。