0

我需要验证一些 22 个字符长的整数。我需要除以那个数字并得到商以及占卜的余数。但是,当我将它发送到模函数时,它返回 7.04406000774059e+21

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

2 回答 2

1

有几个库用于处理 js 中的大数字:

于 2013-03-07T11:28:37.923 回答
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 中处理数字时,您必须记住只有前 15 位或 16 位数字是好的。如果数字有更多位数,结果通常不会准确。
您的示例使用此数字:7044060007740589212932 JavaScript 无法准确处理该数字。它所能做的最好的就是7044060007740589735936523004太高了。但你不想要7044060007740589735936,你想要7044060007740589212932
这是一种解决方法:
将您的号码保留为字符串,而不是数字。
"7044060007740589212932"
然后将字符串分成两部分,就在中间。
"70440600077"现在"40589212932"
你有两个字符串,每个字符串都包含 11 位数字。
然后执行以下操作:
parseInt("70440600077", 10)让你得到号码70440600077
(70440600077 % 97)让你得到号码36
请注意,(97 * 726191753) + 36 = 70440600077
Then 获取36并执行以下操作:
(36 + "40589212932")获取字符串"3640589212932"
(数字加字符串进行字符串连接。) parseInt("3640589212932", 10)获取数字3640589212932 (3640589212932 % 97)获取数字0,这是您的最终结果。请注意这一点97 * 37531847556 = 3640589212932

72619175300000000000 * 97 =  7044060004100000000000
         37531847556 * 97 =           3640589212932
====================         ======================
72619175337531847556 * 97 =  7044060007740589212932

你去吧。

于 2016-12-12T03:29:38.687 回答