很多人在处理金额字段保留几位小数的时候经常想到toFixed这个方法;但是这个方法在不同浏览器却是有差异的
chrome浏览器:
IE11浏览器:
出现这个问题的原因主要是因为每家浏览器遵循的规范不一致,深入的原因需要通过浏览器内核的深入解读来发掘,可以参考以下这篇文章:juejin.cn/post/684490…
解决方案:
1.重写toFixed方法
2.使用一些常用的类库
math.js
decimal.js
bignumber.js
big.js
这里推荐bignumber.js
安装:
npm i bignumber.js
import BigNumber from 'bignumber.js'
加法 plus
减法 minus
乘法 multipliedBy
除法 dividedBy
除法‐取整 dividedToIntegerBy
除法‐取余 modulo
指数运算 exponentiatedBy
开平方 squareRoot
四舍五入 toFixed
简单使用:
const num1 = 0.1 + 0.2;
console.log('num1 = ' + num1)
const temp = new BigNumber(0.1)
// plus 返回对象为BigNumber类型,而不会改变原temp
const num2 = temp.plus(0.2)
console.log('num2 = ' + num2.toString())
document.getElementById('box').innerText = num2
# 参考链接
EEE_754规范: https://en.wikipedia.org/wiki/IEEE_754
Bignumber官网:http://mikemcl.github.io/bignumber.js
参考链接:
EEE_754规范: en.wikipedia.org/wiki/IEEE_7…
Bignumber官网:mikemcl.github.io/bignumber.j…
github:github.com/MikeMcl/big…
754在线工具:www.binaryconvert.com/convert_dou…?
decimal=049046051053
toFixed问题文章:juejin.cn/post/684490…