JS浮点数计算会出现0.1+0.2 !== 0.3。 这个时候可以将浮点数*10转成整数,得出差值后再除10,这样就不会出现精度问题,但是实际运用中,浮点数未必是1位、2位或多位, 这个情况下使用以下方法, 主要的思路是,将传入的浮点数转成字符串再用split以小数点作为分割线将其分割成数组,然后获取小数点的长度,最后作为10的n次方,获取到浮点数成为整数的倍数。
/*** 获取当前浮点数需要转成整数的10的n次方* @param {Number} value* @returns {Number} result 1 | 10 | 100*/const getFloatDigits = (value) => {const str = value.toString();// 判断是否为整数if(Number.isInteger(value) || str.indexOf(".") === -1){return 1;}const digits = str.split(".")[1].length;return Math.pow(10, digits);}const a = 400.2, b = 2.21568;const digits = Math.max(getFloatDigits(a), getFloatDigits(b)); // 100000const value = a - b; // 397.98431999999997const value = (a * digits - b * digits) / digits; // 397.98432
