我刚刚遇到Javascript的一个特殊问题。 API调用会像往常一样返回一些JSON。其中一个返回的是长号“10151920335784069”。 但是,在Javascript世界中变成“10151920335784068”(减去一个)。
(Chrome)控制台中的快速测试演示了它:
x = 10151920335784069;
console.log(x);
10151920335784068
x==10151920335784069;
true
更多:
x==10151920335784067;
true
x==10151920335784066;
false
这里发生了什么?
答案 0 :(得分:3)
JavaScript(ECMA 262 5th Edition)使用double-precision 64bit numbers in IEEE 754 format。该表示无法准确存储您的值,因此必须round it to the nearest value per the IEEE 754 specification。
使用JSON数据的API的作者和用户应牢记此限制。许多运行时环境(例如JavaScript)都有关于此类数值的潜在意外行为,即使JSON格式没有施加任何此类限制。
答案 1 :(得分:1)
Javascript中的所有数值变量都存储为64位浮点整数,因此在高精度级别,数字大于32位时,它将会舍入并为您提供稍微不准确的数字
如果你想检查两个数字是否大致均匀,你可以使用这个
if(Math.abs(num-check)/check<1e-8)){
alert("For most practical intents and purposes, they are equal!");
}