Kategorie szkoleń | Egzaminy | Kontakt

Odpowiedź (1)

  • 2

Podczas operacji dzielenia w Javie trzeba pamiętać o kilku regułach. Wyniki operacji mogą się różnić zależnie od tego, czy operandy są typów całkowitych, czy zmiennoprzecinkowych.

1. Jeśli dzielna i dzielnik są typami całkowitymi, to iloraz też będzie całkowity.
Jeśli dzielna lub dzielnik są typami zmiennoprzecinkowymi, to iloraz będzie zmiennoprzecinkowy.

Stąd:

System.out.println(5/2);     // = 2
System.out.println(5/2.0);   // = 2.5

2. Dzielenie przez zero w przypadku operandów całkowitych powoduje wyrzucenie wyjątku niekontrolowanego java.lang.ArithmeticException.
Dzielenie zmiennoprzecinkowe przez zero zakończy się pomyślnie:

System.out.println(5/0);      // wyjątek ArithmeticException
System.out.println(5/0.0);    // Double.POSITIVE_INFINITY
System.out.println(-5/0.0);   // Double.NEGATIVE_INFINITY


Gdyby operacja dzielenia była wykonywana na operandach typu float, to w wyniku dzielenia przez zero, zwrócone zostałyby analogiczne stałe z klasy Float.

3. Zmiennoprzecinkowe dzielenie zera przez zero, powoduje zwrócenie wartości, która nie reprezentuje liczby (Not-a-Number):

System.out.println(0/0.0)   // Double.NaN


Warto zapamiętać, że porównanie wartości NaN z jakąkolwiek wartością zwraca wartość false. Stąd:

float f1 = Float.NaN;
float f2 = Float.NaN;
System.out.println(f1 == f2);   // false


Jest to konsekwencją implementacji standardu IEEE-754. Do porównania wartości NaN można wykorzystać statyczną metodę isNaN (z klasy Float lub Double).

  • Odpowiedział
  • @ | 26.06.2013
  • TRENER MODERATOR ALTKOM AKADEMII