模运算符不会给出正确的结果

时间:2013-12-18 12:29:13

标签: java

java中的modulo运算符与wolfram alpha有什么不同?

我的公式是:

var = (var-x) % 10

所以wolfram给了我正确的结果,例如

(0 - 1) % 10 = 9

Java给-1。

如何以最好的方式解决这个问题?

4 个答案:

答案 0 :(得分:2)

这就是%的定义方式,并且假定在大多数编程语言中工作,即使相反的方法有时会有用。

我建议你实现自己的模数方法:

int positiveModulo(a, b) {
    int result = a % b;
    if (result < 0) { result += b; }
    return result;
}

答案 1 :(得分:1)

如果需要,我会为那个案例编写我自己的mod,比如

public int nonNegativeModOfDiff(int a, int b,int n) {
  int mod = (a-b)%n;
  return mod >= 0 ? mod : mod + n;
}

答案 2 :(得分:1)

这应该可以解决问题:

class ModTest {
    public static void main (String[] args) {
        int x = -1;
        int m = 10;
        int y = mod(x, m);

        System.out.println(y);
    }

    static int mod(int x, int m) {
        return (x % m + m) % m;
    }
}

答案 3 :(得分:0)

javaDocs开始:“从这个规则可以看出,只有当被除数为负时,余数运算的结果才可以为负数,只有在被除数为正数时才能为正数。此外,结果总是小于除数的大小。“