在JavaScript中尽量避免浮点数直接进行计算,可以将浮点数先转化为整数,之后进行计算
一、.toFixed()
toFixed() 方法使用定点数表示法来格式化一个数字,返回值为String类型。
该方法的舍入法则并不是四舍五入
而且,不同浏览器对 toFixed() 方法的处理结果是不同的。比如:(2.445).toFixed(2) 在IE中执行结果为2.45,但是在谷歌浏览器中的执行结果为2.44。
二、Math.round()
Math.round()函数返回一个数字四舍五入后最接近的整数。他的舍入策略是:
- 如果小数部分大于0.5,则舍入到下一个绝对值更大的整数。
- 如果小数部分小于0.5,则舍入到笑一个绝对值更小的整数。
- 如果小数部分等于0.5,则舍入到下一个正无穷方向上的整数。
所以,对Math.round(-1.5),其结果为-1,这可能不是我们想要的结果。
但是,在实际场景中,往往需要处理的计算结果而不是字面量。问题就出在计算上,比如 2.445*100 的计算结果不是 244.5,而是244.49999999999997,这个时候再使用 Math.round() 方法,其结果自然和预期的就不一样了
console.log(Math.round(244.5)); // 245
console.log(Math.round(2.445 * 100)); // 244
console.log(2.445 * 100); // 244.49999999999997
三、使用大整数进行计算来解决问题
结合上述两种方法,可以使用大整数进行计算来解决问题
(Math.round(2445 / 10) / 100).toFixed(2) // "2.45"