Вычитание длинных чисел в JavaScript

Почему q == 0 в следующем сценарии?

<script>
  var start = 1234567890123456789;
  var end =   1234567890123456799;
  var q = end - start;
  alert(q);
</script>

Я думал бы, что результат должен быть 10. Что корректный путь состоит в том, чтобы вычесть эти два числа?

9
задан Eric 12 January 2010 в 15:37
поделиться

2 ответа

Поскольку числа в JavaScript являются плавающей точкой. Они имеют ограниченную точность.

Когда JavaScript видит очень длинное число, он округляет его до ближайшего числа, он может представлять как 64-битный поплавок. В вашем скрипте начало начало и End оборуждается до того же значения.

alert(1234567890123456789);   // says: 1234567890123456800
alert(1234567890123456799);   // says: 1234567890123456800

Нет встроенного способа сделать точную арифметику на больших целых числах, но вы можете использовать библиотеку BigInteger, такую ​​как этот .

20
ответ дан 4 December 2019 в 08:33
поделиться

Джейсон уже опубликовал почему. Для решения вы можете получить библиотеку Bigint JavaScript в http://www-cs-students.stanford.edu/~tjw/jsbn/

3
ответ дан 4 December 2019 в 08:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: