如何在 Javascript 中将 BigInt 除以小数?
How to divide BigInt by decimal in Javascript?
我有以下代码:
let n = 100n;
let x = 0.1;
console.log(n/x); // Throws error
错误:
TypeError: Cannot mix BigInt and other types, use explicit conversions
如何在 JavaScipt 中将 BigInt
除以十进制值?
一般...
...混合使用 number
和 BigInt
是自找麻烦,这就是为什么没有数学运算符会让您这样做并且需要显式转换的原因。
(注:Decimal
即将到来,成熟后适用于此。)
如果您想要 number
结果...
...在进行计算之前将 BigInt
转换为 number
;请注意,对于非常大的数字(这是 BigInt
的重点),转换 可能有损 ,特别是高于 Number.MAX_SAFE_INTEGER
或低于 Number.MIN_SAFE_INTEGER
的数字:
let n = 100n;
let x = 0.1;
let result = Number(n) / x;
console.log(result);
如果您想要 BigInt
结果...
...更复杂,因为您必须决定如何处理小数结果。 (您的示例不会有小数结果,但一般情况会。)您可以通过 number
,但这同样是一个潜在的有损操作:
let n = 100n;
let x = 0.1;
let result = BigInt(Number(n) / x); // Throws if the result is fractional
// let result = BigInt(Math.round(Number(n) / x)); // Rounds instead of throwing
console.log(result.toString());
如果你能重构这个运算,这样你就可以用整数来表达它,这会让它变得容易得多,因为这样你就可以把 x
变成 BigInt
。例如,在您的 specific 案例中,/ 0.1
与 * (1 / 0.1)
相同,即 * 10
:
let n = 100n;
let x = 10n;
let result = n * x;
console.log(result.toString());
...但这只是具体情况。
您可能会发现您需要在 case-by-case 基础上处理它,尽量避免执行该操作。如果不能,并且除数是小数,round-trip 到 number
可能是不可避免的。
只需将 bigint 转换为数字即可。它会起作用。
let n = 100n;
let x = 0.1;
console.log(Number(n)/x);
它将Return结果1000
我有以下代码:
let n = 100n;
let x = 0.1;
console.log(n/x); // Throws error
错误:
TypeError: Cannot mix BigInt and other types, use explicit conversions
如何在 JavaScipt 中将 BigInt
除以十进制值?
一般...
...混合使用 number
和 BigInt
是自找麻烦,这就是为什么没有数学运算符会让您这样做并且需要显式转换的原因。
(注:Decimal
即将到来,成熟后适用于此。)
如果您想要 number
结果...
...在进行计算之前将 BigInt
转换为 number
;请注意,对于非常大的数字(这是 BigInt
的重点),转换 可能有损 ,特别是高于 Number.MAX_SAFE_INTEGER
或低于 Number.MIN_SAFE_INTEGER
的数字:
let n = 100n;
let x = 0.1;
let result = Number(n) / x;
console.log(result);
如果您想要 BigInt
结果...
...更复杂,因为您必须决定如何处理小数结果。 (您的示例不会有小数结果,但一般情况会。)您可以通过 number
,但这同样是一个潜在的有损操作:
let n = 100n;
let x = 0.1;
let result = BigInt(Number(n) / x); // Throws if the result is fractional
// let result = BigInt(Math.round(Number(n) / x)); // Rounds instead of throwing
console.log(result.toString());
如果你能重构这个运算,这样你就可以用整数来表达它,这会让它变得容易得多,因为这样你就可以把 x
变成 BigInt
。例如,在您的 specific 案例中,/ 0.1
与 * (1 / 0.1)
相同,即 * 10
:
let n = 100n;
let x = 10n;
let result = n * x;
console.log(result.toString());
...但这只是具体情况。
您可能会发现您需要在 case-by-case 基础上处理它,尽量避免执行该操作。如果不能,并且除数是小数,round-trip 到 number
可能是不可避免的。
只需将 bigint 转换为数字即可。它会起作用。
let n = 100n;
let x = 0.1;
console.log(Number(n)/x);
它将Return结果1000