Разбор Javascript int64
Как преобразовать длинное целое число (как строку) в числовой формат в Javascript без javascript, округляя его?
var ThisInt = '9223372036854775808'
alert(ThisInt+'\r' +parseFloat(ThisInt).toString()+'\r' +parseInt(ThisInt).toString());
Мне нужно выполнить добавление на нем, прежде чем отбрасывать его в виде строки, и предпочла бы не нарезать его двумя, если это вообще возможно.
Ответы
Ответ 1
Все числа в Javascript имеют 64-битную точность с плавающей точкой IEE754 "двойной" точности.
Поэтому наибольшее положительное целое число, которое можно точно представить, равно 2 ^ 53 - 1. Остальные биты зарезервированы для показателя степени.
Ваш номер точно в 1024 раза больше этого, поэтому теряет 3 десятичных знака точности. Это просто не может быть представлено более точно.
В ES6 можно использовать Number.isSafeInteger( # )
чтобы проверить число, чтобы увидеть, находится ли оно в безопасном диапазоне:
var ThisInt = '9223372036854775808';
console.log( Number.isSafeInteger( parseInt( ThisInt ) ) );
Ответ 2
С небольшой помощью от рекурсии вы можете напрямую увеличить свою десятичную строку, будь то 64-битное число или больше...
/**
* 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";
}
Ответ 3
Вы не можете сделать это со стандартным Javascript. Но, как всегда, есть небольшая небольшая библиотека, которая поможет нам в этом случае BigInt.js, которая позволит вам использовать целые числа произвольной точности.
Ответ 4
Вы пытались использовать класс Number?
var num = new Number(parseFloat(ThisInt))
Ответ 5
Просто используйте Number (ThisInt) для этого вместо Int или float