啰哩吧嗦
-
关于js双精度的问题,估计大家听到见到最多的就是
0.1+0.2 != 0.3 -
至于为什么
0.1+0.2 != 0.3,在本文不做阐述,有兴趣的可以自己查阅资料
场景
-
接口返回我一个小于1的两个精度数字,(0.44,0.86....)
-
页面需要展示
(1-0.44)*100的值,(1-0.86)*100的值
BUG
-
当接口返回
0.86时,页面渲染结果为14.000000000000002 -
当接口返回
0.34时,页面渲染结果为65.99999999999999
解决
1、使用 toFixed(2)解决,但是解决之后值为 String 类型 ,但是项目中需要使用 Number类型
2、写一个函数处理
handleNumber(val) {
let nVal = (1 - val).toFixed(2) * 100
const sVal = nVal.toString()
if (!sVal.includes('.')) return nVal
nVal = +sVal.split('.')[0]
if (sVal.split('.')[1].startsWith('9')) {
nVal = nVal + 1
}
return nVal
},