高精度获取两数之和(积)

106 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

整体思路,小数点计算会导致精度丢失,但整数不会,所以需要将小数乘以十的n次方后转化为整数, 计算后再除以十的n次方,得到的结果就是精确的结果

const getFloatSum = (x, y) => {
    let a = String(x)
    let b = String(y)
    let aIndex = a.indexOf('.') > -1 ? a.slice(a.indexOf('.')).length - 1 : 0
    let bIndex = b.indexOf('.') > -1 ? b.slice(b.indexOf('.')).length - 1 : 0
    const num = Math.max(aIndex, bIndex)
    return (x * Math.pow(10,num) + y * Math.pow(10,num)) / Math.pow(10,num)
}
getFloatSum(0.01, 0.002301145456) === 0.012301145456 // true
0.01 + 0.002301145456 === 0.012301145456 // false

后续待更新......