java中的modulo运算符与wolfram alpha有什么不同?
我的公式是:
var = (var-x) % 10
所以wolfram给了我正确的结果,例如
(0 - 1) % 10 = 9
Java给-1。
如何以最好的方式解决这个问题?
答案 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开始:“从这个规则可以看出,只有当被除数为负时,余数运算的结果才可以为负数,只有在被除数为正数时才能为正数。此外,结果总是小于除数的大小。“