这个问题有解决办法吗?
我不想使用if / else。
10.435.toFixed(2); => "10.43" //Wrong, should be '10.44'
10.425.toFixed(2); => "10.42" //Wrong, should be '10.43'
10.415.toFixed(2); => "10.42"
10.445.toFixed(2); => "10.45"
parseFloat(10.415).toFixed(2); => "10.42" //Wrong, should be '10.44'
parseFloat(10.425).toFixed(2); => "10.42" //Wrong, should be '10.43'
parseFloat(10.435).toFixed(2); => "10.43"
parseFloat(10.415).toFixed(2); => "10.42"
Math.round(10.435*100)/100 => 10.43 //Wrong, should be '10.44'
Math.round(10.425*100)/100 => 10.42 //Wrong, should be '10.43'
Math.round(10.415*100)/100 => 10.42
Math.round(10.445*100)/100 => 10.45
答案 0 :(得分:0)
您可以尝试将此作为将正数x
四舍五入到小数点后两位的解决方法。
Math.floor(x*100+0.5)/100);
我可以找到舍入预期值之间行为的最佳推理是ECMA script standard中的注释(#2)。
即使使用64位,也无法代表所有内容;不过,我对这里的舍入错误感到有些惊讶。
对于正数或负数,更常见的解决方法是:
Math.floor(x*Math.pow(10,2)+Math.sign(x)*0.5)*Math.pow(10,-2));
并且您可以更改2
以匹配要舍入的小数位数。