Я думаю, что вы имеете в виду разрыв (не «божественный») и остаток (не «плохая часть»).
Я закатил несколько смешных кубиков, чтобы получить случайное число (8233), которое я буду использовать для некоторых примеров.
* Когда вы разделите 8233 на 8, остаток равен 1. 8233 = (8 * 1029) + 1
* При делении 8233 на 9, остаток равен 7. 8233 = (9 * 914) + 7
* При делении 8233 на 10, остаток 3. 8233 = (10 * 823) + 3
* Когда вы разделите 8233 на 11, остальные 5. 8233 = (11 * 748) + 5
Чтобы ответить на ваш вопрос:
при работе с числами в JavaScript, вы должны помнить, что только первые пятнадцать или шестнадцать цифр хороши. Если число больше цифр, результаты обычно не будут точными.
Ваш пример использует этот номер: 7044060007740589212932
JavaScript не может справиться с этим номером точно. Лучшее, что он может сделать, это 7044060007740589735936
, что слишком велико. 523004
. Но вы не хотите 7044060007740589735936
, вы хотите 7044060007740589212932
.
Обходной путь:
Сохраните ваш номер как string, а не как номер.
"7044060007740589212932"
Затем разделите строку на две части, прямо посередине.
"70440600077"
и "40589212932"
Теперь у вас есть две строки, каждая из которых содержит одиннадцать цифр.
Тогда сделайте это:
parseInt("70440600077", 10)
получает вас номер 70440600077
(70440600077 % 97)
получает вам номер 36
Обратите внимание, что (97 * 726191753) + 36 = 70440600077
Затем возьмите 36
и сделать это:
(36 + "40589212932")
получает вас строку "3640589212932"
(номер плюс строка делает конкатенацию строк.) parseInt("3640589212932", 10)
получает номер 3640589212932
(3640589212932 % 97)
получает номер 0
, что является вашим конечным результатом. Обратите внимание, что 97 * 37531847556 = 3640589212932
точно.
72619175300000000000 * 97 = 7044060004100000000000
37531847556 * 97 = 3640589212932
==================== ======================
72619175337531847556 * 97 = 7044060007740589212932
И вот вы идете.
thats большое число, javascript не справится с этим [см. Эту тему] (http://stackoverflow.com/a/307200/1986499) – Imperative