编程语言
首页 > 编程语言> > 大量错误地在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数字处理的东西.但问题仍然存在:

为什么会这样?

解决方法:

你在这里看到的实际上是两次舍入的效果. ECMAScript中的数字在内部表示为双精度浮点数.当id设置为714341252076979033(十六进制为0x9e9d9958274c359)时,实际上会为其指定最近的可表示的双精度值,即714341252076979072(0x9e9d9958274c380).当您打印出该值时,它将四舍五入为15位有效十进制数字,这将给出14341252076979100.

标签:javascript,floating-point,floating-accuracy,ieee-754
来源: https://codeday.me/bug/20191009/1875648.html