提问人:Vince 提问时间:11/7/2018 最后编辑:O. JonesVince 更新时间:11/7/2018 访问量:501
MySQL仅在数字较大时返回错误值
MySQL Returns Wrong Value Only When Number Is Larger
问:
我正在编写一个具有存储值的机器人。其中之一是18个地方。我能够将这些值作为 BIGINT[20] 正确地存储到我的数据库 MySQL 中。存储的值是正确的。
当尝试获取该数字时,问题就出现了。存储在数据库内部的值是502033097630416897,但是,mysql返回的实际值是这个502033097630416900。为了进行比较,它们又来了:
502033097630416900
502033097630416897
似乎返回值要么被舍入,要么被更改。我想测试这个理论,所以我将存储在MySQL中的值更改为较小的数字,123,1234567,依此类推。返回的值实际上是正确的。出于某种原因,如果存储在MySQL中的数字太大,则返回的值不正确。我会发布我的代码进行存储,但我认为这无关紧要,因为存储的实际值是正确的。
至于调用,我有一个函数可以得到多个返回 new
Promise((success, fail) => {
con.query(`SELECT * FROM serversettings WHERE serverId = ${serverID}`, (err, rows) => {
switch(type){
case "onjoin":
success(rows[0].onjoin);
其中 type 是我想要提取的数据。任何见解都会有所帮助,谢谢!
答:
0赞
O. Jones
11/7/2018
#1
Javascript 使用 64 位 IEEE 754 浮点数进行算术运算。在这种算术中,示例中的两个数字彼此相等;IEEE 754 仅提供大约 16 位十进制数字的精度。
要在 Javascript 中处理这些数字,您必须像使用文本字符串一样使用它们,或者使用长数字包。
如果将查询更改为
SELECT CAST(bigint_column AS CHAR) bigint_column, other, else, etc
FROM serversettings
...
您将获得字符串。
评论
console.log(502033097630416897)
)console.log(Number.MAX_SAFE_INTEGER)
)