Какое наибольшее целочисленное значение в JavaScript может быть достигнуто числом без потери точности? - PullRequest
894 голосов
/ 21 ноября 2008

Это определяется языком? Есть ли определенный максимум? Отличается ли он в разных браузерах?

Ответы [ 24 ]

0 голосов
/ 24 декабря 2016

Scato wrotes:

все, что вы хотите использовать для побитовых операций, должно быть между 0x80000000 (-2147483648 или -2 ^ 31) и 0x7fffffff (2147483647 или 2 ^ 31 - 1).

консоль скажет вам, что 0x80000000 равно +2147483648, но 0x80000000 & 0x80000000 равно -2147483648

Шестнадцатеричные числа являются положительными значениями без знака, поэтому 0x80000000 = 2147483648 - это математически правильно. Если вы хотите сделать его значением со знаком, вам нужно сдвинуть вправо: 0x80000000 >> 0 = -2147483648. Вы также можете написать 1 << 31. </p>

0 голосов
/ 21 ноября 2008

Firefox 3, похоже, не имеет проблем с огромными числами.

1e + 200 * 1e + 100 - штраф до 1e + 300.

У Safari, похоже, тоже нет проблем с этим. (Для справки, это на Mac, если кто-то еще решит проверить это.)

Если я не потерял свой мозг в это время дня, это намного больше, чем 64-разрядное целое число.

0 голосов
/ 21 февраля 2019

Когда число больше 2 до степени 53, т. Е.

Math.pow(2, 53)

JavaScript знает это как большое целое число. Затем javascript сохраняет их как 'bigint', поэтому сравнение с 'bigint'==='bigint' становится истинным.

Более безопасный способ хранения их значений в самом объекте Math.

const bigInt1 = Math.pow(2, 55)
const bigInt2 = Math.pow(2, 66)
console.log(bigInt1 === bigInt2) // false
0 голосов
/ 22 марта 2013

Node.js и Google Chrome, похоже, используют 1024-битные значения с плавающей запятой, поэтому:

Number.MAX_VALUE = 1.7976931348623157e+308
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...