我有下面的代码:
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
结果
在进行计算之前将CCD_ 6转换为CCD_;注意,对于非常大的数字(这是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
。例如,在特定的情况下,/ 0.1
与* (1 / 0.1)
相同,即* 10
:
let n = 100n;
let x = 10n;
let result = n * x;
console.log(result.toString());
但这只是一个具体的案例。
你可能会发现你需要根据具体情况来处理它,尽量避免做手术。如果不能,并且除数是分数,那么通过number
的往返可能是不可避免的。
只需将bigint转换为数字。它会起作用的。
let n = 100n;
let x = 0.1;
console.log(Number(n)/x);
它将返回结果1000