js处理运算精度不够,使用Decimal.js解决

 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
一旦转换为数字类型,则会立马丢失精度。所以输入值最好是字符串类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值