JavaScript的运算问题存在两方面:
第一个表示不准问题:
打开浏览器按F12,在Console里,
输入0.1+0.2=0.30000000000000004
输入91.25*0.7 =63.87499999999999
解决这个问题,要用第三方库math.js 或 decimal.js
const math = require('mathjs');
console.log(math.add(0.1, 0.2));
第二个问题toFixed是银行家舍入,如果要求四舍五入,那需要另写方法。
银行家舍入是“四舍六入五进偶”(四舍六入五取偶)(四舍六入五成双)。例如
0.15.toFixed(1)=0.1; //5前一位是奇数1,“舍”,
0.25.toFixed(1)=0.3; //5前一位是偶数2,才会“入”,
其实浏览器toFixed不知什么算法,很乱。
/* * Number.toFiexed默认是四舍六入五进偶,而有些地方需要四舍五入。 * console.log(64.925.toFixed(2),64.935.toFixed(2)); 默认:64.92 64.94. * console.log(math.toFixed2(64.925,2),math.toFixed2(64.935,2)); 期待:64.93 64.94. */ export function toFixed2(num, n) { //console.log('toFixed2') var rounded = math.round(num, n); var result = rounded.toString(); if (n <= 0) return result; var idx = result.indexOf('.'); if (idx < 0) { idx = result.length; result += '.'; } while (result.length <= idx + n) { result += '0'; } return result; }