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