2013-12-18 2 views
0

Как получается, что оператор modulo в java отличается от wolfram alpha?Оператор modulo не дает правильного результата

Моя формула:

var = (var-x) % 10 

так вольфрам дает мне правильный результат, например

(0 - 1) % 10 = 9 

Java дает -1.

Как я могу исправить это наилучшим образом?

+3

-1 mod 10 is -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

Я хотел бы написать свой собственный мод для этого случая, если это необходимо, что-то вроде

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: «Из этого правила, что результат операции остатка может быть отрицательным, только если делимое отрицательно, и может быть положительный, только если дивиденд положителен. Более того, величина результата всегда меньше, чем величина дивизора ».

Смежные вопросы