Modulo运行方式计算Java中的值与它在VBScript中的运行方式之间是否存在差异?
这两个都返回了我在代码中稍后使用的数字作为更大数字的一部分,但我相信问题出在VBScript和Java处理Mod运算符的方式之间。我可能错了。
我正在尝试解决为什么我在运行下面的VBscript代码块而不是Java中的复制版本时看到不同输出的原因,对于延迟更新帖子感到抱歉。
该函数接受一个String,然后根据循环中的逻辑确定一个返回数字。丢失的代码只是初始化所使用的变量,并确定要循环的字符串的长度。
任何帮助将不胜感激!谢谢
的VBScript:
For i=1 to Length
CurrentNumber = Mid(CCNumber,i,1)
CurrentNumber = Int(CurrentNumber)
If (i mod 2) <> 0 then
ModNumber = CurrentNumber * 2
If ModNumber > 9 then
Total = Total + 1 + (ModNumber mod 10)
Else
Total = Total + ModNumber
End If
Else
Total = Total + CurrentNumber
End If
Next
cd = ((Int(Total/10) + 1) * 10) - Total
if cd = 10 then cd = 0
CheckDigit = cd
爪哇:
for (i=0; i<length; i++)
{
String currentNumberString = CCNumber.substring(i,i+1);
currentNumber = Integer.valueOf(currentNumberString);
if (i % 2 != 0)
{
Integer ModNumber = currentNumber * 2;
if (ModNumber > 9)
{
total = total + 1 + (ModNumber % 10);
}
else
{
total = total + ModNumber;
}
}
else
{
total = total + currentNumber;
}
}
int cd = ((Integer.valueOf(total/10) + 1) * 10) - total;
if (cd == 10)
{
cd = 0;
}
return cd;
}
答案 0 :(得分:2)
一个区别:VBScript中的Mod
运算符始终返回一个整数。 Java的%
运算符可以返回小数值。因此5.2 Mod 2
在VBScript中的计算结果为1,但5.2 % 2
在Java中的计算结果为1.2。
修改:根据您的修改,这似乎是Luhn algorithm。 Java代码唯一真正的问题是拼写错误;与mod运算符无关。在这里你分配一个变量currrentNumber
(带有三个R):
currrentNumber = Integer.valueOf(currentNumberString);
然后你使用另一个变量(双R):
Integer ModNumber = currentNumber * 2;
编辑:另一个区别是因为VBScript字符串索引从1开始,而Java字符串索引从0开始,所以代码使用不同的交替数字。 If (i mod 2) <> 0
应为If (i mod 2) = 0
,if (i % 2 != 0)
应为if (i % 2 == 0)
,我不确定是哪一个。