Big.js库解决JavaScript浮点数精度丢失问题详解
JavaScript中浮点数计算常出现精度丢失,影响金额等场景。本文介绍使用Big.js库解决该问题,涵盖安装引入、Big对象创建及加减乘除、指数等核心方法的使用,确保计算结果准确。
一、精度丢失
浮点数计算精度丢失是多种编程语言中普遍存在的问题,例如:
0.1 + 0.2 === 0.30000000000000004近期在项目开发中,涉及将金额从元转换为分(仅需乘以100)的操作时,发现乘法运算同样存在精度丢失现象:
19.9 * 100 === 1989.9999999999998由于涉及金额处理,此类问题绝对不可接受。一种直接的解决思路是:
Number(Number(19.9 * 100).toFixed()) === 1990然而,toFixed()方法本身也可能引发精度丢失。经过进一步调研,发现有一个专门用于处理JavaScript精度问题的库:http://mikemcl.github.io/big.js/
二、Big.js
安装:
npm install big.js在项目中引入:
import Big from 'big.js';通过Big构造函数可以创建一个Big对象,随后调用相应的方法即可满足计算需求。
let x = new Big(0.1)
注意,最后我们需要使用toNumber方法将Big对象重新转换为数字。
2.1 加
Big对象上的plus方法实现加运算。
0.1 + 0.2 // 0.30000000000000004
x = new Big(0.1)
y = x.plus(0.2).toNumber() // 0.3
Big(0.7).plus(x).plus(y).toNumber() // 1.12.2 减
Big对象上的minus方法实现减运算。
0.3 - 0.1 // 0.19999999999999998
x = new Big(0.3)
x.minus(0.1).toNumber() // 0.22.3 乘
Big对象上的times方法实现乘运算。
0.6 * 3 // 1.7999999999999998
x = new Big(0.6)
y = x.times(3).toNumber() // 1.8
Big('7e+500').times(y).toNumber() // Infinity
Big('7e+500').times(1.8).toString() // '1.26e+501'2.4 除
Big对象上的div方法实现除运算。
x = new Big(355)
y = new Big(113)
x.div(y).toNumber() // 3.14159292035398230088
Big.DP = 2
x.div(y).toNumber() // 3.14
x.div(5).toNumber() // 71DP:涉及除法的操作结果的最大小数位数。它仅与 div 和 sqrt 方法相关,以及当指数为负时与 pow 方法相关。
2.5 指数
Big对象上的pow方法实现指数运算。
Math.pow(0.7, 2) // 0.48999999999999994
x = new Big(0.7)
x.pow(2) // '0.49'
Big.DP = 20
Big(3).pow(-2) // '0.11111111111111111111'
new Big(123.456).pow(1000).toString().length // 5099
new Big(2).pow(1e+6) // Time taken (Node.js): 9 minutes 34 secs.到此这篇关于如何使用big.js解决JavaScript浮点数精度丢失问题的文章就介绍到这了,更多相关js浮点数精度丢失内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!
什么时候该用JS构造器:与工厂模式、字面量的选择对比
2026-11-05 16:18:22
推荐几款轻量级JS照片墙开源库及对比
2026-11-05 15:56:19
JavaScript递归写法有哪些常见陷阱及避免方法
2026-11-05 14:53:38
JS数组浅拷贝与深拷贝怎么选?场景与方法总结
2026-11-05 14:41:02
p5.js 中 setup() 和 draw() 函数的执行机制详解
2026-11-05 12:32:38
