Java中的Modulo与VBScript之间的区别

时间:2014-10-14 16:48:42

标签: java vbscript modulo

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;
 } 

1 个答案:

答案 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) = 0if (i % 2 != 0)应为if (i % 2 == 0),我不确定是哪一个。