java - Java 和 VBScript 中模数的区别

标签 java vbscript modulo

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/

相关文章:

c++ - 如何在 C++ 中有效地找到具有给定余数的产品?

arrays - 谷歌表格: Average of every other column

java - 需要有关 Java Vector/ConcurrentModificationException 同步的建议

java - PipedInputStream 和 PipedOutputStream 的用例

java - 更改路径后,VB 脚本未执行 我看到 Windows 脚本主机提示符具有不同的路径

vbscript - 解密函数给出带有特殊字符的错误结果

vbscript - 无法在VBScript中捕获8004020f错误

java - 尝试使用按钮传递项目和子项目

java - 为什么 Spring 在 TransactionSynchronization 接口(interface)中没有回滚方法?

python - 模块化 pow() 中的负幂