Modulo 在 Java 中计算值的方式与在 VBScript 中计算值的方式有区别吗?
这两个都返回一个数字,我稍后在代码中将其用作更大数字的一部分,但我认为问题出在 VBScript 和 Java 处理 Mod 运算符的方式之间。不过我可能是错的。
我正在尝试解决为什么我在运行下面的 VBscript 代码块与运行 Java 中的复制版本时看到不同输出的原因,对于更新帖子的延迟深表歉意。
该函数接受一个字符串,然后根据循环中的逻辑确定返回数字。缺少的代码仅与初始化所使用的变量以及确定要循环的字符串的长度有关。
任何帮助将不胜感激!谢谢
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
Java:
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;
}
最佳答案
一个区别:Mod
VBScript 中的运算符始终返回一个整数。 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)
,我不确定是哪个。
关于java - Java 和 VBScript 中模数的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26366046/