js浮点运算0.1+0.2 == 0.30000000000000004

由于JavaScript的Number类型为双精度IEEE 754 64位浮点类型。计算的时候会将超出精度部分进行”零舍一入”。导致 0.1+0.2 = 0.30000000000000004,其他采用IEEE 754标准的语言也有误差,可以去这个网站上查看https://0.30000000000000004.com/

解决方案

可以用第三方库来解决,或者如果是一位小数x10后再运算后再除以10

decimal.js

1
2
let x = new Decimal(0.1)
x = x.plus(0.2) // '0.3'

demo
https://github.com/MikeMcl/decimal.js

mathjs

1
2
let x = math.format(0.1+0.2, {notation: 'fixed', precision: 1})               // '0.3'
// precision 保留几位小数

demo
https://github.com/josdejong/mathjs

参考

IEEE 754标准
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Number