Tengo este código a continuación:
let n = 100n; let x = 0.1; console.log(n/x); // Throws errorError:
TypeError: Cannot mix BigInt and other types, use explicit conversions ¿Cómo divido un BigInt por un valor decimal en JavaScipt?
... number de mezcla y BigInt está buscando problemas, por lo que ningún operador matemático le permitirá hacerlo y se requiere una conversión explícita.
(Nota: el Decimal está en el horizonte, que se aplicará aquí cuando madure).
number ... ...convertir el BigInt a un number antes de hacer el cálculo; tenga en cuenta que la conversión puede tener pérdidas para números muy grandes (este es el punto de BigInt ), específicamente números por encima de Number.MAX_SAFE_INTEGER o por debajo Number.MIN_SAFE_INTEGER :
let n = 100n; let x = 0.1; let result = Number(n) / x; console.log(result);BigInt ... ...es más complicado, porque tienes que decidir qué hacer con un resultado fraccionario. (Tu ejemplo no tendrá un resultado fraccionario, pero el caso general sí). Podrías pasar por number , pero de nuevo es una operación potencialmente con pérdidas:
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()); Si puede refactorizar la operación para que pueda expresarla en números enteros, eso lo hace mucho más fácil, porque entonces puede convertir x en BigInt . Por ejemplo, en su caso específico , / 0.1 es lo mismo que * (1 / 0.1) que es * 10 :
let n = 100n; let x = 10n; let result = n * x; console.log(result.toString());... pero eso es sólo ese caso específico.
Probablemente descubra que necesita manejarlo caso por caso, tratando de evitar realizar la operación. Cuando no puede, y el divisor es fraccionario, un number de ida y vuelta puede ser inevitable.
Simplemente convierta el bigint en número. Funcionará.
let n = 100n; let x = 0.1; console.log(Number(n)/x);Devolverá el resultado 1000