Почему q == 0 в следующем сценарии?
<script>
var start = 1234567890123456789;
var end = 1234567890123456799;
var q = end - start;
alert(q);
</script>
Я думал бы, что результат должен быть 10. Что корректный путь состоит в том, чтобы вычесть эти два числа?
Поскольку числа в JavaScript являются плавающей точкой. Они имеют ограниченную точность.
Когда JavaScript видит очень длинное число, он округляет его до ближайшего числа, он может представлять как 64-битный поплавок. В вашем скрипте начало начало
и End
оборуждается до того же значения.
alert(1234567890123456789); // says: 1234567890123456800
alert(1234567890123456799); // says: 1234567890123456800
Нет встроенного способа сделать точную арифметику на больших целых числах, но вы можете использовать библиотеку BigInteger, такую как этот .
Джейсон уже опубликовал почему. Для решения вы можете получить библиотеку Bigint JavaScript в http://www-cs-students.stanford.edu/~tjw/jsbn/