2

有谁知道为什么下面会返回第三个项目的值 + 1 而不仅仅是返回项目的正确值?

JSFiddle:http: //jsfiddle.net/gz4gA/

var items = [10150778347353933, 95698693940, 10151139500303463, 337394396325739, 181838311261, 186661577450, 131239636262, 408877845803303, 130260147046659, 10151850964430652, 190553376302, 256062744215, 73099117435, 30571361895, 85358203371, 133621058800, 67899501771, 422515109312, 56271008850, 107997326726, 382312857465, 144163385597840, 10150882307310061, 184244804960462, 63953746442, 114588455254586, 201992215550, 401799715673, 287217811299764, 96668113887, 106824841365, 130084127023410, 186061480932, 60351005403, 209693813195, 10150593297330601, 319622191193, 68686268942, 290590784383, 63467856465, 470235003273, 127564720953, 127437064077, 102351319089, 113530295368, 82102942060, 290699835908, 81445359355, 137490940846, 119104781632, 415115129332, 120520318032430, 142666108227, 146711457500, 344723925588563, 239108779476988, 121853939741, 109322101963, 54456613147, 473850413696, 10150329755772674];
console.log(items[2]);

​</p>

4

2 回答 2

4

JavaScript 数字是 64 位浮点值。可以精确表示的最大整数值是 2 53或 9007199254740992。大于该值的数字(包括数组的第三个元素)仅表示近似值。例如,参见ECMA 262-5,第 8.5 节

于 2012-10-30T05:10:24.183 回答
2

根据这个答案https://stackoverflow.com/a/307200/816620,javascript 可以表示所有整数的范围的顶部是:9007199254740992它小于您的10151139500303463. 所以,你的数字太大了。

如果这些类似于项目代码而不是您真正需要用作数字的东西,那么也许您应该将它们存储为字符串,而不是数字。

于 2012-10-30T05:10:55.907 回答