大量错误地在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