美文网首页
小数加法

小数加法

作者: liyinkan | 来源:发表于2020-04-23 14:32 被阅读0次

    众所周知的原因,0.1 + 0.2 = 0.30000000000000004

    解决这个问题,最佳方法:使用库
    可选择的很多

    有小伙伴说在大多数场景可以 *100 再 /100 搞定
    现实情况是:GG

    console.log(18.9 * 100)
    // 1889.9999999999998
    

    10分钟造了个轮子,至少目前自己项目够用

    let plus = (a, b) => {
        let findDecimal = (x) => {
            let arr = ('' + x).split('.')
            if (arr.length > 2) {
                throw 'not invliad number'
            }
            return arr.length == 1 ? 0 : arr[1].length
        }
        let toInteger = (x, d) => {
            return +(x.toFixed(d).replace('.', ''))
        }
        let aDecimal = findDecimal(a)
        let bDecimal = findDecimal(b)
        let dec = aDecimal > bDecimal ? aDecimal : bDecimal
        return (toInteger(a, dec) + toInteger(b, dec)) / Math.pow(10, dec)
    }
    

    原理上是字符串移动小数点操作。
    没啥技术含量,够用就好。

    看了眼 Java BigDecimal 的实现,实际上是把一个数字的表示变成了两部分

    • 整数部分 number
    • 小数部分 scale
      具体就懒得写了。

    相关文章

      网友评论

          本文标题:小数加法

          本文链接:https://www.haomeiwen.com/subject/hoqaihtx.html