Почему console.log (10150141932135203) печатает 10150141932135204 как в Firefox, так и в Chrome, и как работать с такими большими целочисленными значениями, как эти? - PullRequest
5 голосов
/ 06 марта 2012

Я пытался выяснить, почему у одного из наших клиентов в Facebook возникли проблемы, и я отследил его до номера 10150141932135203, который превратился в 10150141932135204, что дало нам довольно неожиданные результаты.

$ node
> 10150141932135203
10150141932135204
> 10150141932135204
10150141932135204
> 10150141932135205
10150141932135204
> 10150141932135206
10150141932135206
> 10150141932135207
10150141932135208
> 10150141932135208
10150141932135208
> 10150141932135209
10150141932135208
> 10150141932135210
10150141932135210

Как мне справиться с целыми числами этого размера?

1 Ответ

4 голосов
/ 06 марта 2012

Если числа больше, чем позволяет спецификация IEEE 754 (2 53 ), они потеряют точность, как показывают ваши примеры.

Вы можете использовать библиотеку Binary Coded Decimal для JavaScript, например, BCMathJs .

Это, конечно, применимо, только если вам нужно выполнить арифметику с числами. Если нет, сохраните их как строки.

...