51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

使用bignumber.js库,处理JS小数浮点数计算精度问题

安装 {#%E5%AE%89%E8%A3%85}

npm install bignumber.js
or
yarn add bignumber.js

静态方法 {#%E9%9D%99%E6%80%81%E6%96%B9%E6%B3%95}

静态方法调用后一般返回 BigNumber 实例

config {#config}

给构造函数设置参数

DECIMAL_PLACES {#decimal_places}

设置小数位数

BigNumber.config({ DECIMAL_PLACES: 4 })
BigNumber.random().toNumber() // 0.7793

sum {#sum}

计算传入的参数和,参数类型可以是 String,Number

// 两数之和
var x = BigNumber.sum('11', 23)
x.toNumber() // 34
`// 多个参数
arr = [2, new BigNumber(14), '15.9999', 12]
var y = BigNumber.sum(...arr)
y.toString() // '43.9999'
`

clone {#clone}

生成 bignumber 构造函数

var X = BigNumber.clone()
var y = new X()
y // bignumber实例

isBigNumber {#isbignumber}

判断是否是 bignumber 实例,通过 clone 的构造函数生成的实例仍然是 bignumber 实例,但是原型与 BigNumber 原型不同

var y = new BigNumber(2)
BigNumber.isBigNumber(y) // true
y instanceof BigNumber // true
`var BN = BigNumber.clone()
z = new BN(x)
z instanceof BigNumber // false
BigNumber.isBigNumber(z) // true
`

maximum,minimum {#maximum%2Cminimum}

求最大值,简写 max,min

var x = [2222, 3333, '4444']
BigNumber.max(...x).toNumber() // 4444
BigNumber.min(...x).toNumber() // 2222

random {#random}

生成伪随机数,传入参数决定小数位数

BigNumber.random().toNumber() // 0.1501651215311695
BigNumber.random(3).toNumber() // 0.150

实例方法 {#%E5%AE%9E%E4%BE%8B%E6%96%B9%E6%B3%95}

negated {#negated}

相反数

var x = new BigNumber(1.8)
x.negated() // -1.8

absoluteValue(abs) {#absolutevalue(abs)}

绝对值

var x = new BigNumber(-0.01)
x.abs().toNumber() // 0.01

comparedTo {#comparedto}

比较两数,返回值: 1: 大于 -1:小于 0:等于 null:比较值出现 NaN

var x = new BigNumber(Infinity)
var y = new BigNumber(5)
var z = new BigNumber(5)
x.comparedTo(y) // 1
y.comparedTo(x) // -1
y.comparedTo(z) // 0
y.comparedTo(NaN) // null

decimalPlaces(dp) {#decimalplaces(dp)}

确定小数位数

var x = new BigNumber(1234.5678912345)
var y = new BigNumber(1234.56)
x.dp(2).toNumber() // 1234.56
y.dp(10).toNumber() // 1234.56

plus {#plus}

加法运算

0.1 + 0.2 // 0.30000000000000004
var x = new BigNumber(0.1)
x.plus(0.2).toNumber() // 0.3

minus {#minus}

减法运算

0.3 - 0.1 // 0.19999999999999998
var x = new BigNumber(0.3)
x.minus(0.1) // 0.2

multipliedBy(times) {#multipliedby(times)}

乘法运算

0.6 * 3 // 1.7999999999999998
var x = new BigNumber(0.6)
x.times(3) // 1.8

dividedBy(div) {#dividedby(div)}

除法运算

var x = new BigNumber(300)
x.div(3).toNumber() // 100
x.div(7).dp(3).toNumber() // 42.857

dividedToIntegerBy(idiv) {#dividedtointegerby(idiv)}

除法运算,返回整数

var x = new BigNumber(5)
x.idiv(3).toNumber() // 1
x.idiv(0.7).toNumber() // 7

modulo(mod) {#modulo(mod)}

取余

1 % 0.9 // 0.09999999999999998
var x = new BigNumber(1)
x.mod(0.9).toNumber() // 0.1

exponentiatedBy(pow) {#exponentiatedby(pow)}

幂运算

Math.pow(0.7, 2) // 0.48999999999999994
var x = BigNumber(0.7)
x.pow(2).toNumber() // 0.49

integerValue {#integervalue}

取整,参数取值参考 Properties

var x = new BigNumber(123.456)
x.integerValue().toNumber() // 123
x.integerValue(BigNumber.ROUND_CEIL).toNumber() // 124

isEqualTo(eq) {#isequalto(eq)}

比较两数是否相等,NaN 不等于 NaN

0 === 1e-324 // js中
var x = new BigNumber(0)
x.eq('1e-324') // false
`var y = new BigNumber(NaN)
y.eq(NaN) // false
`

isFinite {#isfinite}

判断数字是否有效

var x = new BigNumber(1)
x.isFinite() // true

var y = new BigNumber(Infinity)
y.isFinite() // false

`var z = new BigNumber(NaN)
z.isFinite() // false
`

isGreaterThan(gt) {#isgreaterthan(gt)}

0.1 > 0.3 - 0.2 // true
var x = new BigNumber(0.1)
x.gt(BigNumber(0.3).minus(0.2)) // false

isGreaterThanOrEqualTo(gte) {#isgreaterthanorequalto(gte)}

判断是否大于等于某数,用法同 isGreaterThan

isLessThan(lt) {#islessthan(lt)}

判断是否小于某数,用法同 isGreaterThan

isLessThanOrEqualTo(lte) {#islessthanorequalto(lte)}

判断是否小于等于某数,用法同 isGreaterThan

isNaN {#isnan}

判断是否是 NaN

var x = new BigNumber(NaN)
x.isNaN() // true
`var y = new BigNumber(Infinity)
y.isNaN() // false
`

isPositive {#ispositive}

判断是否是正数

var x = new BigNumber(-0)
x.isPositive() // false

isNegative {#isnegative}

判断是否是负数,用法同 isPositive

isZero {#iszero}

判断是否是 0 或者-0

var x = new BigNumber(-0)
x.isZero() // true

toFixed {#tofixed}

控制小数位数,不够后面补 0

var x = 3.456
var y = new BigNumber(x)
x.toFixed().toNumber() // 3
y.toFixed().toNumber() // 3.456
y.toFixed(0).toNumber() // 3
y.toFixed(2).toNumber() // 3.46
y.toFixed(5).toNumber() // 3.45600

toNumber {#tonumber}

转 Number

toString {#tostring}

转 String

赞(2)
未经允许不得转载:工具盒子 » 使用bignumber.js库,处理JS小数浮点数计算精度问题