解决JS浮点数运算结果不精确的问题

文档:bignumber.js API

github:GitHub - MikeMcl/bignumber.js: A JavaScript library for arbitrary-precision decimal and non-decimal arithmetic

npm地址:bignumber.js - npm

 bignumber.js特性
整数和小数
简单的API,但功能齐全
比Java的BigDecimal的JavaScript版本更快,更小,更容易使用
缩小到8 KB
复制toExponential,toFixed,toPrecision和toStringJavaScript的数字类型的方法
包含toFraction和正确舍入的squareRoot方法
支持加密安全的伪随机数生成
没有依赖
广泛的平台兼容性:仅使用JavaScript 1.5(ECMAScript 3)功能
全面的文档和测试集


使用:

1、本地引入:

        <script src='path/to/bignumber.js'></script>

2、ES module 

  1. <script type="module">

  2. import BigNumber from './path/to/bignumber.mjs';

3、CDN

<script src='https://cdn.jsdelivr.net/npm/bignumber.js@9.0.2/bignumber.min.js'></script>

 


// 计算传入的参数和,参数类型可以是 String,Number
// 两数之和
let x = BigNumber.sum('11', 23)
x.toNumber() // 34


// 多个参数
arr = [2, new BigNumber(14), '15.9999', 12]
let y = BigNumber.sum(...arr)
y.toString() // '43.9999'


// maximum,minimum
// 求最大值,简写 max,min
let x = [2222, 3333, '4444']
BigNumber.max(...x).toNumber() // 4444
BigNumber.min(...x).toNumber() // 2222
decimalPlaces(dp)


// 确定小数位数
let x = new BigNumber(1234.5678912345)
let y = new BigNumber(1234.56)
x.dp(2).toNumber() // 1234.56
y.dp(10).toNumber() // 1234.56


// plus
// 加法运算
0.1 + 0.2 // 0.30000000000000004
let x = new BigNumber(0.1)
x.plus(0.2).toNumber() // 0.3


// minus
// 减法运算
0.3 - 0.1 // 0.19999999999999998
let x = new BigNumber(0.3)
x.minus(0.1) // 0.2
multipliedBy(times)

// 乘法运算
0.6 * 3 // 1.7999999999999998
let x = new BigNumber(0.6)
x.times(3) // 1.8
dividedBy(div)

// 除法运算
let x = new BigNumber(300)
x.div(3).toNumber() // 100
x.div(7).dp(3).toNumber() // 42.857
dividedToIntegerBy(idiv)

// 除法运算,返回整数
let x = new BigNumber(5)
x.idiv(3).toNumber() // 1
x.idiv(0.7).toNumber() // 7
modulo(mod)

// 取余
1 % 0.9 // 0.09999999999999998
let x = new BigNumber(1)
x.mod(0.9).toNumber() // 0.1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值