JavaScript analizando int64
integer parseint (5)
¿Cómo puedo convertir un entero largo (como una cadena) a un formato numérico en Javascript sin javascript redondearlo?
var ThisInt = ''9223372036854775808''
alert(ThisInt+''/r'' +parseFloat(ThisInt).toString()+''/r'' +parseInt(ThisInt).toString());
Necesito realizar una adición en él antes de devolverlo como una cadena y preferiría no tener que dividirlo en dos si es posible.
¿Has intentado usar la clase Number?
var num = new Number(parseFloat(ThisInt))
Con un poco de ayuda de la recursión, puedes incrementar directamente tu cadena decimal, ya sea que represente un número de 64 bits o más ...
/**
* Increment a decimal by 1
*
* @param {String} n The decimal string
* @return The incremented value
*/
function increment(n) {
var lastChar = parseInt(n.charAt(n.length - 1)),
firstPart = n.substr(0, n.length - 1);
return lastChar < 9
? firstPart + (lastChar + 1)
: firstPart
? increment(firstPart) + "0"
: "10";
}
No puedes hacer esto con Javascript estándar. Pero como siempre, hay una pequeña biblioteca ingeniosa para ayudarnos, en este caso BigInt.js , que le permitirá usar enteros de precisión arbitraria.
Solo use Number(ThisInt) para esto en lugar de Int o float
Todos los Numbers en Javascript tienen un punto flotante IEE754 precisión "doble" de 64 bits.
El mayor número entero positivo que, por lo tanto, se puede representar con precisión es 2 ^ 53 - 1. Los bits restantes están reservados para el exponente.
Su número es exactamente 1024 veces más grande que eso, por lo que pierde 3 dígitos decimales de precisión. Simplemente no se puede representar con más precisión.
En ES6, se puede usar Number.isSafeInteger( # )
para probar un número y ver si está dentro del rango seguro:
var ThisInt = ''9223372036854775808'';
console.log( Number.isSafeInteger( parseInt( ThisInt ) ) );
También hay una biblioteca de BigInteger disponible que debería poder ayudar, sin embargo, y evitar que tengas que hacer toda la cadena y los bits a ti mismo.
EDIT 2018/12 ahora hay una clase nativa de BigInt
(y una nueva sintaxis literal) aterrizada en Chrome y NodeJS.