Tengo algunos datos en una aplicación de nodo que son números en formato de cadena. Estoy tratando de analizarlos y redondearlos a 3 decimales parseFloat(num).toFixed(3)
. Dado que los números son muy grandes, los convierte automáticamente a notación científica (por ejemplo, 2,0210702881736412e+37). Cambié a usar parseInt(), Number() pero nada funciona. ¿Cómo soluciono esto?
El objeto de datos es muy grande, por lo que soy escéptico para usar una función de conversión personalizada que convierta la forma exponencial en decimal, ya que podría afectar el rendimiento.
Usar BigInt
const num = BigInt(2.0210702881736412e+37);
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt
Los valores BigInt son similares a los valores numéricos en algunos aspectos, pero también difieren en algunas cuestiones clave: un valor BigInt no se puede usar con métodos en el objeto matemático integrado y no se puede mezclar con un valor numérico en las operaciones; deben ser obligados al mismo tipo. Sin embargo, tenga cuidado al forzar valores de un lado a otro, ya que la precisión de un valor BigInt puede perderse cuando se convierte en un valor numérico.
Cómo usas BigInt para ello: BigInt(n).toString();
const num = BigInt(2.0210702881736412e+37); // 20210702881736411847466551731631947776n const strNum = num.toString(); // 20210702881736411847466551731631947776
Editar, información adicional
La biblioteca Bigint (o también el tipo de datos incorporado) solo puede manejar números enteros. Creo que probar la biblioteca de operaciones numéricas de JavaScript parece ser la forma más rápida de calcular el punto decimal. Una biblioteca de números grandes normalmente funciona con números de coma flotante de precisión arbitraria. Hay varias bibliotecas recomendadas. bignumber.js o BigNumber