本文已参与「新人创作礼」活动,一起开启掘金创作之路。
整体思路,小数点计算会导致精度丢失,但整数不会,所以需要将小数乘以十的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
后续待更新......