Подтвердить что ты не робот

Разбор Javascript int64

Как преобразовать длинное целое число (как строку) в числовой формат в Javascript без javascript, округляя его?

var ThisInt = '9223372036854775808'
alert(ThisInt+'\r' +parseFloat(ThisInt).toString()+'\r' +parseInt(ThisInt).toString());

Мне нужно выполнить добавление на нем, прежде чем отбрасывать его в виде строки, и предпочла бы не нарезать его двумя, если это вообще возможно.

4b9b3361

Ответ 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