0.1+0.2等于0.3吗
不等于。
解决:
-
强制保留小数点后多少位
-
扩大10倍相加后再缩小10倍。为了将来在项目中避免出现小数不精准的情况,可以自己手动封装计算加、减、乘、除的函数
封装:function chu(a, b, signal) { // 判断a和b是是否是小数 // 将a和b转成字符串 a = '' + a b = '' + b if(!a.includes('.') && !b.includes('.')) { switch(signal) { case '/': return +a / +b case '*': // 让结果缩小 return +a * +b case '-': return +a - +b case '+': return +a + +b default: return NaN } } // 获取a和b中小数点所在下标 let aIndex = a.indexOf('.') let bIndex = b.indexOf('.') // 判断a和b中是否包含小数点 let aSuffix = '' if(aIndex >= 0) { // 截取a中小数点后的部分 aSuffix = a.slice(aIndex + 1) } let bSuffix = '' if(bIndex >= 0) { bSuffix = b.slice(bIndex + 1) } // 计算a和b小数点后较长的位数 let maxSuffix = Math.max(aSuffix.length, bSuffix.length) // 将a和b都扩大10的maxSuffix次方 a = +a * Math.pow(10, maxSuffix + 1) b = +b * Math.pow(10, maxSuffix + 1) switch(signal) { case '/': // 让a和b相除 return a / b case '*': // 让结果缩小 return a * b / Math.pow(10, (maxSuffix + 1) * 2) case '-': return (a - b) / Math.pow(10, (maxSuffix + 1)) case '+': return (a + b) / Math.pow(10, (maxSuffix + 1)) default: return NaN } } // 调用 var sum = calculate(100, 2, '/') console.log(sum)