我需要验证一些 22 个字符长的整数。我需要除以那个数字并得到商以及占卜的余数。但是,当我将它发送到模函数时,它返回 7.04406000774059e+21
labas = modulo(7044060007740589212932, 97);
function modulo (divident, divisor){
alert(divident);
}
我认为您的意思是除法(不是“神圣”)和余数(不是“坏部分”)。
我掷了一些有趣的骰子来得到一个随机数(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 无法准确处理该数字。它所能做的最好的就是7044060007740589735936
,523004
太高了。但你不想要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
你去吧。