啰哩吧嗦
-
关于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
},