一尘不染

用JavaScript错误地舍入了大数

javascript

参见以下代码:

<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数字处理有关。但是问题仍然存在:

为什么会这样呢?


阅读 253

收藏
2020-04-25

共1个答案

一尘不染

您在这里看到的实际上是两个取整的结果。ECMAScript中的数字在内部表示为双精度浮点数。当id设置为7143412520769790330x9e9d9958274c359十六进制)时,实际上为它分配了最接近的可表示双精度值,即7143412520769790720x9e9d9958274c380)。当您打印出该值时,该值将四舍五入为15个有效十进制数字,即14341252076979100

2020-04-25