JavaScript中奇怪且不可预测的舍入行为

时间:2018-12-28 05:14:45

标签: javascript rounding

我正在编写一个Web应用程序,它将文本(美元)形式的SQL数据转换为数字,然后求和。但是,我只遇到了很奇怪的某些值!

我有一个JSFiddle来显示此内容(具有比下面更多的值)以及下面的示例代码,使用文本变量,就像我从SQL数据中提取的那样。 JSFiddle found here

我已经完成了很多人推荐的操作,并将值乘以100只能使用整数-希望避免舍入问题。我尝试了Number()和toFixed等的各种组合,但是似乎无法掌握避免JS中舍入问题的最佳方法。 大多数值都很好,但是我偶然遇到了“ 129.42”这个问题。我不知道还有哪些其他数字也可能导致我的应用完全不可靠!这是非常特殊的行为!?

HTML:

<html>
<body id='body'>
Example of NASTY rounding in JavaScript:
<br><br>
</body>
</html>

JS:

var ary = [ '129.42', '129.45', '125.42', '125.45', '130.42'];
var div;
for (var x in ary) {
  var text = ary[x];
  var num = parseInt(Number(text)*100);

  div = document.createElement('div');
  div.innerHTML = 'Original "text" number: '+text;
  document.getElementById('body').appendChild(div);

  div = document.createElement('div');
  div.innerHTML = 'Multiply by 100 and Converted to Integer: '+num+'<br><br>';
  document.getElementById('body').appendChild(div); 
}

以上结果为:

JavaScript中的NASTY舍入示例:

原始“文本”编号:129.42 乘以100并转换为整数:12941

原始“文本”编号:129.45 乘以100并转换为整数:12944

原始“文本”编号:125.42 乘以100并转换为整数:12542

原始“文本”编号:125.45 乘以100并转换为整数:12545

原始“文本”编号:130.42 乘以100并转换为整数:13041

0 个答案:

没有答案