2013-12-18 77 views
0

它是怎么来的,在java中的模运算符是不同的,然后wolfram阿尔法?模运算符没有给出正确的结果

我的公式是:

var = (var-x) % 10 

所以钨给我,例如

(0 - 1) % 10 = 9 

正确结果的Java给人-1。

我该如何解决这个最好的方法?

+3

-1 mod 10是-1。 – Dave

+0

-1 mod 10 = -1和-1 mod 10 = 9都是正确的 –

+0

@Dave它取决于根据https://en.wikipedia.org/wiki/Modulo_operation的编程语言。 – MeNa

回答

2

那怎么%定义是应该工作在大多数编程语言中,即使相反有时会有用。

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

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

谢谢。解决了这个问题。 – user1480139

1

如果需要的话我会写我自己的mod为求这种情况下,像

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

这会产生1,而不是9. – Dave

+1

是的,我有严重的脑滞留。 – reindeer

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

更新........ –

0

javaDocs:“从这个规则,其余操作的结果可以为负只有当股息为负如下,可只有当分红是正数时才是正数,而且结果的数量总是小于除数的数量。“