参见以下代码:
<html> <head> <script src="http://www.json.org/json2.js" type="text/javascript"></script> <script type="text/javascript"> var jsonString = '{"id":714341252076979033,"type":"FUZZY"}'; var jsonParsed = JSON.parse(jsonString); console.log(jsonString, jsonParsed); </script> </head> <body> </body> </html>
当我在Firefox 3.5中看到控制台时,jsonParsed的值为:
Object id=714341252076979100 type=FUZZY
即数字是四舍五入的。尝试了不同的值,结果相同(四舍五入)。
我也没有四舍五入规则。714341252076979136舍入为714341252076979200,而714341252076979135舍入为714341252076979100。
编辑: 请参阅下面的第一条评论。显然,这与JSON无关,而与JavaScript数字处理有关。但是问题仍然存在:
为什么会这样呢?
您在这里看到的实际上是两个取整的结果。ECMAScript中的数字在内部表示为双精度浮点数。当id设置为714341252076979033(0x9e9d9958274c359十六进制)时,实际上为它分配了最接近的可表示双精度值,即714341252076979072(0x9e9d9958274c380)。当您打印出该值时,该值将四舍五入为15个有效十进制数字,即14341252076979100。
id
714341252076979033
0x9e9d9958274c359
714341252076979072
0x9e9d9958274c380
14341252076979100