JS浮点数计算会出现0.1+0.2 !== 0.3。 这个时候可以将浮点数*10转成整数,得出差值后再除10,这样就不会出现精度问题,但是实际运用中,浮点数未必是1位、2位或多位, 这个情况下使用以下方法, 主要的思路是,将传入的浮点数转成字符串再用split以小数点作为分割线将其分割成数组,然后获取小数点的长度,最后作为10的n次方,获取到浮点数成为整数的倍数。

    1. /**
    2. * 获取当前浮点数需要转成整数的10的n次方
    3. * @param {Number} value
    4. * @returns {Number} result 1 | 10 | 100
    5. */
    6. const getFloatDigits = (value) => {
    7. const str = value.toString();
    8. // 判断是否为整数
    9. if(Number.isInteger(value) || str.indexOf(".") === -1){
    10. return 1;
    11. }
    12. const digits = str.split(".")[1].length;
    13. return Math.pow(10, digits);
    14. }
    15. const a = 400.2, b = 2.21568;
    16. const digits = Math.max(getFloatDigits(a), getFloatDigits(b)); // 100000
    17. const value = a - b; // 397.98431999999997
    18. const value = (a * digits - b * digits) / digits; // 397.98432