
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
