【问题标题】:Difference between Modulo in Java and VBScriptJava和VBScript中的模之间的区别
【发布时间】:2014-10-14 16:48:42
【问题描述】:

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

【问题讨论】:

  • 您有理由相信这是事实吗?一个例子可以帮助人们更好地回答你的问题。
  • 您是否正在解决一些具体问题?
  • Remainder Operator in Java 这是Mod Operator in VBScript(我假设负数或浮点数可能出现意外行为?)

标签: java vbscript modulo


【解决方案1】:

一个区别:VBScript 中的Mod 运算符总是返回一个整数。 Java 的% 运算符可以返回一个小数值。所以5.2 Mod 2 在 VBScript 中的计算结果为 1,而在 Java 中5.2 % 2 的计算结果为 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) &lt;&gt; 0 应该是If (i mod 2) = 0,或者if (i % 2 != 0) 应该是if (i % 2 == 0),我不确定是哪个。

【讨论】:

  • 对我来说,准确复制 VBscript 中的 Mod 运算符在 Java 中的工作方式最简单的方法是什么?我致力于将 VBscript 文件转换为 java 类,这就是我问这个问题的原因。
  • 这似乎是我复制并粘贴到这篇文章的拼写错误。在代码中我没有看到。不过,感谢您在此处指出这一点,是的,您是对的,这是我正在研究的 Luhn 算法。
  • 我确实注意到了这一点,我将“i”的循环起始位置更改为“0”以试图抵消这一点。 VBscript 是我正在处理的“真实”代码,因此我认为在 Java 中测试将 if (i % 2 !=0) 更改为 if (i % 2 == 0) 是有意义的。
  • 看起来它成功了,我非常感谢你在这方面的帮助,我已经被困在试图解决这个问题几天了,它已经解决了。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-19
  • 2012-01-21
  • 2016-06-29
  • 2012-09-03
  • 2016-03-28
  • 2017-12-23
相关资源
最近更新 更多