js 里面带 `n` 的数字是什么?

2024-06-26by@tim&@ChatGPT.Model: GPT-4o
tim

js 里面带 n 的数字是什么?

Avatar
Avatar

在 JavaScript 中,带 n 的数字表示一个 BigInt 类型的数字。BigInt 是一种用于表示任意精度整数的新数据类型,它允许你表示比 Number 类型所能表示的最大值还要大的整数。

例如:

const bigNumber = 1234567890123456789012345678901234567890n;
console.log(bigNumber);
// 输出: 1234567890123456789012345678901234567890n

const anotherBigNumber = BigInt("1234567890123456789012345678901234567890");
console.log(anotherBigNumber);
// 输出: 1234567890123456789012345678901234567890n

一些关于 BigInt 的重要点:

  1. BigInt 可以表示任意大的整数。
  2. BigInt 通过在数字后面加上 n 来表示。
  3. BigInt 不能与 Number 类型的值进行混合运算,如果需要进行混合运算,应先进行类型转换。
  4. 可以使用 BigInt 函数将字符串或 Number 类型转换为 BigInt。

下面是一些示例:

const num = 10n; // BigInt 类型
const num2 = 20n; // BigInt 类型

// BigInt 与 BigInt 之间的运算
const sum = num + num2;
console.log(sum); // 输出: 30n

// BigInt 与 Number 类型混合运算时会抛出错误
const num3 = 10;
try {
    const invalidSum = num + num3; // 会抛出错误
} catch (error) {
    console.log(error); // TypeError: Cannot mix BigInt and other types, use explicit conversions
}

// 需要进行类型转换
const validSum = num + BigInt(num3);
console.log(validSum); // 输出: 20n

const validSum2 = Number(num) + num3;
console.log(validSum2); // 输出: 20

BigInt 类型在处理非常大的整数时非常有用,比如在密码学、精确计数、金融计算等领域。

tim

bigInt 之间的除法,如何保留小数点?

Avatar
Avatar

在 JavaScript 中,BigInt 类型用于表示任意精度的整数,而不是浮点数。因此,BigInt 类型的除法结果总是一个整数,任何小数部分都会被截断。

如果你需要进行带小数点的精确计算,你应该使用 JavaScript 的 Number 类型或者使用专门的库来处理任意精度的小数。

下面是一些示例:

使用 Number 类型进行除法

const a = 10n;
const b = 3n;

// 转换为 Number 类型进行除法
const result = Number(a) / Number(b);
console.log(result); // 输出: 3.3333333333333335

使用 BigDecimal 库进行任意精度小数运算

JavaScript 本身没有 BigDecimal 类型,不过有一些第三方库可以提供类似的功能,比如 decimal.jsbig.js

使用 decimal.js

首先,你需要安装 decimal.js

npm install decimal.js

然后你可以像下面这样使用:

const Decimal = require('decimal.js');

const a = new Decimal('10');
const b = new Decimal('3');

const result = a.div(b);
console.log(result.toString()); // 输出: 3.333333333333333333333333333333333

使用 big.js

同样,你需要先安装 big.js

npm install big.js

然后使用如下:

const Big = require('big.js');

const a = new Big('10');
const b = new Big('3');

const result = a.div(b);
console.log(result.toString()); // 输出: 3.3333333333333335

这些库提供了对任意精度小数的支持,可以避免使用 Number 类型时出现的精度问题。如果你需要进行高精度的金融计算或科学计算,使用这些库是一个不错的选择。