Odpowiedź 5 jest prawidłowa, bo w większości popularnych języków programowania, takich jak Python, C++, C#, czy Java, rzutowanie liczby zmiennoprzecinkowej (czyli typu float lub double) na typ całkowity (int) powoduje odcięcie części ułamkowej, a nie zaokrąglenie. To jest bardzo ważne, bo wiele osób intuicyjnie spodziewa się zaokrąglenia, a tu po prostu wszystko po przecinku ląduje w koszu. W przypadku podanego przykładu zmienna x ma wartość 5.96, ale po rzutowaniu na int, zarówno w Pythonie poprzez funkcję int(), jak i w pozostałych językach przez klasyczne rzutowanie (int)x, zostaje tylko 5. Dokładnie tak działa konwersja: odcina się część po przecinku niezależnie od tego, jak blisko liczba jest kolejnej całości. To niesamowicie przydatne np. podczas pracy z indeksami tablic albo gdy chcemy szybko zamienić wynik dzielenia na liczbę całkowitą. W praktyce, warto pamiętać, że takie rzutowanie nie wykonuje żadnej walidacji ani sprawdzania – jeśli liczba jest ujemna, to po prostu też odcina część ułamkową w kierunku zera, więc int(-5.96) da -5. Z mojego doświadczenia bardzo często spotyka się błąd w kodzie, kiedy ktoś oczekuje zaokrąglenia i nie otrzymuje go, bo rzutowanie zawsze odcina, nie zaokrągla. Warto znać tę różnicę przy projektowaniu algorytmów i korzystać np. z funkcji round() jeśli potrzebujemy zaokrąglenia, a nie odcinania. To takie małe niuanse, ale potem wchodzą w nawyk i bardzo ułatwiają życie podczas kodowania.
W zadaniu można łatwo się pomylić, bo sposób działania rzutowania (czyli konwersji typu float/double na int) nie zawsze jest intuicyjny. Często spotykam się z błędnym przekonaniem, że taka operacja powinna albo zostawić część ułamkową, albo zaokrąglić liczbę, albo nawet przesunąć przecinek, jak w odpowiedzi 596 – co jest typowe przy interpretacji liczb całkowitych i dziesiętnych w innych kontekstach, ale nie tutaj. W rzeczywistości, podczas rzutowania liczby zmiennoprzecinkowej na typ całkowity, program po prostu odcina wszystko, co jest po przecinku, i zostawia tylko część całkowitą. To wynika bezpośrednio ze specyfikacji tych języków oraz z architektury komputerów (operacje na typach prostych). Przykład z 5.96: po rzutowaniu zostaje tylko 5, bo 0.96 nas nie interesuje – to jest eliminowane. Zaokrąglanie do 6, jak można by się spodziewać, jeśli ktoś myśli kategoriami matematycznymi, nie zachodzi – odcinanie nie bierze pod uwagę wartości po przecinku, tylko po prostu ją kasuje. Z kolei zapisanie 5.96 jako wyniku jest niemożliwe, bo typ int może przechowywać tylko liczby całkowite. Uważam, że najczęstszy błąd wynika właśnie z automatycznego założenia, że komputer zachowa się tak jak człowiek podczas zaokrąglania czy czytania liczb. W praktyce, kiedy potrzebujemy zaokrąglić liczbę w górę lub w dół, trzeba użyć funkcji takich jak round(), floor() czy ceil() (w Pythonie lub odpowiednich w innych językach). Rzutowanie na int to jedno z podstawowych, ale zdradliwych zachowań – z mojego punktu widzenia znajomość tego mechanizmu jest kluczowa, zwłaszcza przy pracy z indeksami, pętlami czy konwersją danych wejściowych z typów tekstowych na liczby. Podsumowując – rzutowanie float/double na int zawsze po prostu ucina część ułamkową, nie zaokrągla jej, nie interpretacją dziesiętną. To jest zgodne z dokumentacją języków programowania i standardami przemysłowymi.