我知道我必须在这里丢失一些东西,我试图将任意数量的数字舍去到两位小数而没有成功。总计超过两个时,Javascript中舍入数字失败?
var sumOne = 0;
var sumTwo = 0;
[12.993, 12.99, 12.99].forEach(function(number){
sumOne += roundOne(number * 0.1);
sumTwo += roundTwo(number * 0.1);
})
function roundOne(n){
return (Math.round((n *100))/100);
}
function roundTwo(n){
return +(n.toFixed(2));
}
console.log("sumOne is ", sumOne, " sumTwo is ", sumTwo);
https://jsfiddle.net/m90ecdh9/1/
在此的jsfiddle或以上代码我结束了以下输出
sumOne is 3.9000000000000004 sumTwo is 3.9000000000000004
为什么都四舍五入的这些方法不能导致总和只有两个小数?
奇怪的是,如果我在数组中只用两个数字来尝试这个相同的代码,我的结果与预期的结果一样,这两个方法只有两个小数位。
你只是遇到了一些浮点舍入错误。这并不罕见。如果你绝对需要避免这些,强制你的变量使用整数类型。 – IvanSanchez
* roundOne *函数有多余的括号:'return Math.round(n * 100)/ 100;'会做。这个名字似乎不合适,因为它四舍五入到小数点后两位。 – RobG
另请参阅:[*为什么230/100 * 100不返回230?*](http://stackoverflow.com/questions/13248173/why-does-230-100100-not-return-230/13248284#13248284)和[*浮点数学是否被破坏?*](http://stackoverflow.com/questions/588004/is-floating-point-math-broken) – RobG