JavaScript中小数点计算问题

方法一

将需要运算的小数扩大10倍、100倍、。。。将小数扩大到整数,然后进行运行,最后再缩小扩大的倍数

var num1 = 0.1
var num2 = 0.2
var num3 = (num1 * 10 + num2 * 10) / 10
console.log(num3) // 0.3

方法二

通过js中Number的内置方法toFixed,强制保留小数点后位数

var num1 = 0.1
var num2 = 0.2
var num3 = num1 + num2
console.log(num3.toFixed(3)) // 0.300 - 强制保留小数点后3位

方法三

封装数学运算方法,当需要进行数学运算的时候,不直接进行,而调用自己封装的方法来实现数学运算

function add(...args){
    var num = args.find(item => {
        if(item != 0 && !item){
             throw new Error("数学运算要使用数字")
        }
    })
    var arr = args.map(item => {
        var index = (item+'').indexOf('.')
        if(index >= 0){
            return (item+'').split('.')[1].length
        }
    })
    arr = arr.filter(item => item)
    if(arr.length){
        var max = Math.max(...arr)
        var data = args.map(item => item * Math.pow(10, max))
        var data.reduce((a, b) => a + b) / Math.pow(10, max)
    }else{
        var data = args
        return data.reduce((a, b) => a + b)
    }
}
// 调用使用:
var num1 = add(0.1, 0.2)
console.log(num1); // 0.3

var num2 = add(1, 2)
console.log(num2); // 3

var num3 = add(1, 2.1)
console.log(num3); // 3.1

参考: 细说JavaScript中小数点计算不精准的原因和解决方案 - 知乎

猜你喜欢

转载自blog.csdn.net/qq_41579327/article/details/131251226