Zielony Smok - logo witryny

Operator % (modulus operator)

Operator % (ang. modulus operator) w języku Java

Podaje resztę z dzielenia.

dzielna % modulus = reszta

10 % 3 = 1 zwraca resztę

3 % 10 = 3 zwraca modulus

Problemy zaczynają się, gdy dzielna i/lub dzielnik są liczbami ujemnymi.

Bardzo ważne: znak reszty będącej wynikiem dzielenia % jest zawsze znakiem dzielnej – znak dzielnika nie ma znaczenia i można go zignorować.

10 % -3 = 1; (dzielna dodatnia, a więc reszta dodatnia)

-10 % 3 = -1; (dzielna ujemna, a więc reszta ujemna)

-10 % -3 = -1; (dzielna ujemna, a więc reszta ujemna)

-3 % 10 = -3; (dzielna ujemna więc reszt, a ujemna)

3 % -10 = -3; (dzielna dodatnia, a więc reszta dodatnia)

-3 % -10 = -3 (dzielna ujemna, a więc reszta ujemna)

Operatora % można używać nie tylko do liczb całkowitych, ale również do liczb zmiennoprzecinkowych:

3.7 % 1.2 = 0.10000000000000031

Jeżeli dzielna lub dzielnik są wynikami obliczeń oraz zawsze reszta (ponieważ jest wynikiem obliczeń) powinny być – ze względu na sposób reprezentacji liczb zmiennoprzecinkowych – zaokrąglone np. przy użyciu niżej prezentowanej metody statycznej: roundToDecimal(double, int)

 /** funkcja zaokragla podaną liczbę do określonej liczby miejsc po przecinku
     *@param num double - liczba do zaokrąglenia
     *@param dec int - liczba miejsc po przecinku;
     *@return double - zwraca zaokrągloną liczbę
     */
    public static double roundToDecimal(double num, int dec) {
        int multi = (int)Math.pow(10, dec);
        int temp = (int)Math.round(num * multi);
        return (double)temp / multi;
    }

A oto nasze przykłady;

        int dzielna1 = 10;
        int dzielna2 = -10;
        double dzielna3 = 3.7;
        int dzielnik1 = 3;
        int dzielnik2 = -3;
        double dzielnik3 = 1.2;
        //
        int reszta1 = dzielna1 % dzielnik1;
        System.out.println(reszta1);
        int reszta2 = dzielna1 % dzielnik2;
        System.out.println(reszta2);
        int reszta3 = dzielna2 % dzielnik1;
        System.out.println(reszta3);
        int reszta4 = dzielna2 % dzielnik2;
        System.out.println(reszta4);
        //---
        double reszta5 = dzielna3 % dzielnik3;
        System.out.println(reszta5);
        System.out.println(roundToDecimal(reszta5,1));

A oto wyniki na konsoli:

     1
     1
    -1
    -1
     0.10000000000000031
     0.1