有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java模运算符未给出正确的结果

为什么java中的模运算符与wolfram alpha不同

我的公式是:

var = (var-x) % 10

wolfram给了我一个正确的结果

(0 - 1) % 10 = 9

Java给出了-1

我怎样才能以最好的方式解决这个问题


共 (4) 个答案

  1. # 1 楼答案

    来自javaDocs:“根据这条规则,余数运算的结果只有当被除数为负时才能为负,只有当被除数为正时才能为正。此外,结果的大小总是小于除数的大小。”

  2. # 2 楼答案

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

    我建议您实施自己的模方法:

    int positiveModulo(a, b) {
        int result = a % b;
        if (result < 0) { result += b; }
        return result;
    }
    
  3. # 3 楼答案

    如果需要,我会为这种情况编写自己的mod,比如

    public int nonNegativeModOfDiff(int a, int b,int n) {
      int mod = (a-b)%n;
      return mod >= 0 ? mod : mod + n;
    }
    
  4. # 4 楼答案

    这应该可以做到:

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