Artur 46 wyśw. 26-06-2025 22:19

Rzutowanie

Przy rzutowaniu w nawiasie piszemy typ, do którego chcemy przekonwertować wynik. Dlaczego ma znaczenie to czy zapiszę równanie w nawiasie czy nie?

Np. (część kodu):

" int a=8;

int b=3;

System.out.println("a/b="+(double)a/b); "

Jak zapiszę te 3 linijki to wyskoczy poprawny wynik (około 2.666).


A jak zapiszę w ten sposób:

" int a=8;

int b=3;

System.out.println("a/b="+(double)(a/b)); "

To będzie 2.0


Poza tym dlaczego kalkulator w Javie nie jest dokładny? Przy dzieleniu 8/3 daje 2.666666...5 (a powinno być 7 na końcu)

Dlaczego odejmując 3.16-2.51 Java "wypluwa" 0.6500000000000004 (chodzi o tę czwórkę na końcu)?





Programowanie Dodaj post do ulubionych Poproś o pomoc
s.gugula 28-06-2025 10:04

Bo jak zrobisz nawias to najpierw policzy się po prostu a/b, które zostanie uznane za dzielenie dwóch liczb całkowitych i zostanie to przerobione na 2. Potem program użyje rzutowania, ale ponieważ będzie już rzutował po prostu samą dwójkę, to zrobi z niej tylko 2.0.

Co do dokładności - nie będziemy tu wnikać w szczegóły, ale każda taka operacja arytmetyczna przeprowadzana w ramach jakiegoś programu (zwłaszcza, gdy wynik jest jakąś liczbą niecałkowitą) cechuje się pewną dokładnością, ma to związek m.in. z tym, że określona ilość pamięci komputera jest przeznaczana na przechowywanie takiego wyniku i dlatego np. na którymś miejscu po przecinku (jak widać dość daleko) może się pojawić pewna niedokładność. Natomiast te wyniki, gdybyśmy się ograniczyli do w praktyce bardziej przydatnych np. kilku miejsc po przecinku są oczywiście dobre.


Artur 28-06-2025 11:51

A jak działa to dzielenie (double) a/b w takim razie, że tu akurat jest poprawny wynik?


s.gugula 29-06-2025 14:40

Gdy nie ma nawiasu, to on tu pojedzie sobie od lewej do prawej, więc "zobaczy", że pojawia się najpierw rzutowanie, a zatem będzie wiedział, że to co po nim następuje ma być doublem.


Artur 29-06-2025 21:17

A jakby w takim razie napisać "(a/b) (double)" albo "a/b (double) to też by zadziałało?


s.gugula 30-06-2025 09:48

Nie, to się nawet nie skompiluje, bo ta komenda wywołująca rzutowanie musi być przed rzutowanym wyrażeniem. Warto w takich sytuacjach zresztą samemu potestować różne rzeczy :)


Zadzwoń teraz Dotknij, aby się ze mną skontaktować.