JavaScript精度问题_如何处理JS精度问题_bigjs的使用
2024-11-23 14:48:52
JavaScript 中的精度问题十分常见,以至于我们在开发工程中需要注意,并统一处理
1169

为什么会有精度问题?

JavaScript 是一种动态类型的脚本语言,它在计算和操作数字时可能会遇到精度问题。精度问题通常是由于 JavaScript 使用的是 IEEE 754 标准的 64 位浮点数表示法,这种表示法在处理非常大或非常小的数字时可能会出现问题。

在 JavaScript 中,数字可以是整数或浮点数。整数表示为十进制数,而浮点数则使用科学计数法表示为尾数乘以 10 的幂次方。例如,123.456 可以表示为 123.456e0,其中 e 表示指数,0 表示指数为 0。

 由于浮点数的表示方式,它们在计算过程中可能会出现舍入误差。例如,1.1 + 1.2 = 2.300000000000004,而不是 2.3。这是因为在计算机内部,浮点数是以二进制形式存储的,并且只能近似表示为十进制数。

例如

12.32 * 7=86.24000000000001;

8.80 * 100 * 12 / 100=105.60000000000002;

为了避免精度问题,JavaScript 开发者可以使用一些技巧。例如,可以使用字符串格式化来确保数字的精确表示,或者使用固定小数位数的方法来限制浮点数的精度。此外,也可以使用数学库,如 JavaScript 自带的 math 库或第三方库,来执行更精确的数学计算。


如何解决? 

Big.js 是一个用于处理大型数字的 JavaScript 库,它提供了方便的方法来操作和计算大数字,避免 JavaScript 中数字精度的问题。 

安装 big.js: 

首先,我们需要在项目中安装 big.js。可以通过以下命令安装:

npm install big.js --save

导入 big.js:

在使用 big.js 之前,我们需要导入它的库。可以通过以下代码导入:

import big from 'big.js';

创建大数字:

在 big.js 中,可以使用构造函数 Big() 创建一个大数字。该构造函数接受一个数字或数字字符串作为参数,并返回一个 Big 对象。例如:

const bigNumber = new big(123456789);

操作大数字:

big.js 提供了很多方便的方法来操作大数字。例如,可以使用以下方法来获取大数字的绝对值、加法、减法、乘法、除法等:

bigNumber.abs(); // 获取绝对值
bigNumber.add(1234); // 加法
bigNumber.subtract(1234); // 减法
bigNumber.times(2); // 乘法
bigNumber.div(2); // 除法

此外,还可以使用以下方法来将大数字转换为字符串、数字、数组等:

bigNumber.toString(); // 转换为字符串
bigNumber.valueOf(); // 转换为数字
bigNumber.toArray(); // 转换为数组

比较大数字:

big.js 提供了以下方法来比较两个大数字的大小:

bigNumber.gt(); // 大于
bigNumber.gte(); // 大于等于
bigNumber.lt(); // 小于
bigNumber.lte(); // 小于等于