2013-03-07 2 views
0

Мне нужно проверить целое число, которое составляет 22 символа. Мне нужно бояться и получать плохую часть предсказания. НО, когда я посылаю его функцию, функция получает эту 7.04406000774059e + 21JQuery, как работать с большими номерами

labas = modulo(7044060007740589212932, 97); 
function modulo (divident, divisor){ 
alert(divident); 
} 
+0

thats большое число, javascript не справится с этим [см. Эту тему] (http://stackoverflow.com/a/307200/1986499) – Imperative

ответ

0

Я думаю, что вы имеете в виду разрыв (не «божественный») и остаток (не «плохая часть»).
Я закатил несколько смешных кубиков, чтобы получить случайное число (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 

И вот вы идете.