闭坑:原生js的toFixed方法

230 阅读1分钟

很多人在处理金额字段保留几位小数的时候经常想到toFixed这个方法;但是这个方法在不同浏览器却是有差异的

chrome浏览器:

chrome.png

IE11浏览器:

IE11.png

出现这个问题的原因主要是因为每家浏览器遵循的规范不一致,深入的原因需要通过浏览器内核的深入解读来发掘,可以参考以下这篇文章: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…