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不知什么算法,很乱。
.Net算法准 Math.Round(5.665, -2);默认就是银行家算法,如果需要四舍五入Math.Round(5.665, -2,MidpointRounding.AwayFromZero);
以下给出js的四舍五入算法,toFixed2
/* * 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; }
标签:四舍五入,不准,console,运算,toFixed2,JavaScript,toFixed,math,log From: https://www.cnblogs.com/wigis/p/17770159.html