1.Decimal的基本使用
npm i decimal.js@10.4.3
import Decimal from 'decimal.js'
let a = 1
let b = 3
let num = 0
加法:
num = new Decimal(a).add(new Decimal(b))
减法:
num = new Decimal(a).sub(new Decimal(b))
乘法:
num = new Decimal(a).mul(new Decimal(b))
除法:
num = new Decimal(a).div(new Decimal(b))
注意:num此时为decimal对象。无法正常使用,需要使用toNumber()或toString()转化后才能使用。
num = num.toNumber() //转化为数字
num = num.toString() //转化为字符
let K = 111.00100
new Decimal(K).sd() //显示有几位有效数字,这里返回6
new Decimal(K).sd(true) //显示全部位数,这里返回8
K.toPrecision(3) //保留几位数字(不够的会补0),这里返回111
//注意保留的位数不能小于小数点前的数字,否则会返回错误数字,若K.toPrecision(2)返回'1.1e+2'
new Decimal(K).toSignificantDigits(2).toNumber() // 保留几位有效数字(不返回小数点后的0),当前返回110
new Decimal(K).toSignificantDigits(1).toNumber() // 100
new Decimal(K).toSignificantDigits(3).toNumber() // 111
new Decimal(K).toSignificantDigits(4).toNumber() // 111 不返回小数点后不是有效数字的0
new Decimal(K).toSignificantDigits(10).toNumber() // 111.001 超过有效数字不会补0
new Decimal(K).toSignificantDigits().toNumber() //111.001
let Y = 3.14159265
new Decimal(Y).toFixed(3, Decimal.ROUND_DOWN).toNumber() // 3.141 保留三位小数向下取整
new Decimal(Y).toFixed(2, Decimal.ROUND_UP).toNumber() // 3.15 保留两位小数向上取整
new Decimal(Y).toFixed(3, Decimal.ROUND_HALF_UP).toNumber() // 3.142 保留三位小数四舍五入
注意:当输入值为1.0000000000000001时,由于js的精度问题。会导致输入时就使其变为1,这时再使用Decimal也无济于事。最好是输入值为‘1.0000000000000001’字符串类型,这样不会丢失精度。
let num = 1.0000000000000001
console.log(num,new Decimal(num).toString()) // 1 '1'
由于输入时就变为1,故使用Decimal也无用。
let str = '1.0000000000000001'
console.log(str,new Decimal(str).toString()) // '1.0000000000000001' '1.0000000000000001'
字符串则不会出现该问题。
console.log(new Decimal(str).toNumber()) // 1
一旦转换为数字类型,则会立马丢失精度。所以输入值最好是字符串类型。