浮点数精度问题
js计算会转为二进制进行计算,采用IEEE 754标准双精度浮点(64),64位中1位浮点数中符号,11位存储指数,52位存储浮点数的有效数字,从53位开始会舍入(舍入规则:0舍1入)
decimal可解决精度失准问题
decimal使用
安装引入
npm install --save decimal.js
import Decimal from 'decimal.js
let a = 1
let b = 2
a,b可以为任何类型。decimal内部会自己处理兼容
计算结果得到的是一个Decimal对象,需要转换为number(toNumber())或string(toString())
加
let res = new Decimal(a).add(new Decimal(b)).toNumber()
减
let res = new Decimal(a).sub(new Decimal(b)).toNumber()
乘
let res = new Decimal(a).mul(new Decimal(b)).toNumber()
除
let res = new Decimal(a).div(new Decimal(b)).toNumber()
查看有几位小数(不计算小数点最后末尾的0)
y = new Decimal(987000.000)
y.sd() //3有效位数
y.sd(true) //6总共位数
保留多少个位数(小数位会补0)
x = 45.6
x.toPrecision(5) //45.600
保留多少位有效位数(小数位不会补0 计算有效位数)
x = new Decimal(9876.5)
x.toSignificantDigits(6) //9876.5 只针对有效位数
保留几位小数 和js中number一样
toFixed
x = 3.456
向下取整
x.toFixed(2,Decimal.ROUND_DOWN) //3.45(舍入模式 向上0 向下1 四舍五入)
向上取整
Decimal.ROUND_UP
四舍五入
ROUND_HALF_UP