Poprawna jest metoda Math.floor(x), ponieważ w JavaScript odpowiada ona za zaokrąglenie liczby w dół do najbliższej liczby całkowitej. Dla x = 2.8 wynik Math.floor(2.8) to 2, bo funkcja „odcina” część ułamkową i schodzi do najbliższej liczby całkowitej mniejszej lub równej podanej wartości. To zachowanie jest zdefiniowane w specyfikacji ECMAScript i jest spójne we wszystkich nowoczesnych przeglądarkach oraz środowiskach typu Node.js. W praktyce Math.floor bardzo często wykorzystuje się przy pracy z indeksami tablic, generowaniu losowych liczb całkowitych czy przy obliczeniach, gdzie fragment ułamkowy nie ma znaczenia, np. liczba stron, liczba pełnych paczek produktu, paginacja rekordów. Typowy wzorzec to na przykład Math.floor(Math.random() * 10), który daje liczby całkowite z zakresu 0–9. Warto też świadomie odróżniać Math.floor od innych metod zaokrąglania: Math.ceil(2.8) zwróci 3, bo zaokrągla „w górę”, a Math.round(2.8) również zwróci 3, bo zaokrągla do najbliższej liczby całkowitej. Z mojego doświadczenia w JS często używa się właśnie floor tam, gdzie ważna jest przewidywalność w dół, np. przy obliczaniu indeksów czy dzieleniu na równe segmenty, żeby nie wyjść poza zakres. Warto też pamiętać, że Math.floor działa poprawnie również dla liczb ujemnych, ale tam „w dół” oznacza w kierunku −∞, więc Math.floor(−2.8) da −3, co czasem potrafi zaskoczyć, jeśli ktoś myśli tylko o „obcięciu” części po przecinku.
W tym zadaniu chodzi o dokładne zrozumienie, jak działają konkretne metody obiektu Math w JavaScript, a nie tylko o mechaniczne skojarzenie nazwy funkcji z efektem. Dla liczby x = 2.8 poprawnym wynikiem ma być 2, czyli liczba całkowita powstała przez zaokrąglenie w dół. Najczęstsze pomyłki biorą się z mylenia różnych typów zaokrągleń albo z kojarzenia nazw z innych języków czy z matematyki teoretycznej, bez sprawdzenia, co dokładnie robią w JS. Jeżeli ktoś wybiera exp(x), to zwykle wynika to z faktu, że nazwa brzmi „matematycznie” i kojarzy się z jakąś funkcją liczbową. Jednak Math.exp(x) zwraca e do potęgi x, czyli wartość funkcji wykładniczej. Dla 2.8 byłaby to liczba około 16.44, kompletnie niepowiązana z zaokrąglaniem. Ta metoda służy do obliczeń matematycznych wyższego poziomu, np. w algorytmach statystycznych czy finansowych, a nie do pracy na liczbach całkowitych. Z kolei wybór ceil(x) wynika często z mylenia pojęć „zaokrąglanie” i „obcinanie”. Math.ceil(2.8) zaokrągla zawsze w górę do najbliższej liczby całkowitej, więc wynik to 3. W praktyce ceil przydaje się np. przy obliczaniu liczby stron w paginacji, gdy chcemy mieć pewność, że ostatnia strona też się zmieści, nawet jeśli nie jest pełna. Tutaj jednak wymagane jest zejście w dół, więc ceil daje odwrotny efekt niż potrzebny. sqrt(x) to z kolei pierwiastek kwadratowy. Math.sqrt(2.8) zwróci wartość około 1.673, a więc nadal liczbę zmiennoprzecinkową. Czasem uczniowie mylą tę metodę, bo myślą, że „pierwiastek” w jakiś sposób „zmniejsza” liczbę, więc może zbliżyć ją do 2. W kontekście programowania webowego takie myślenie jest niebezpieczne – tu liczy się precyzyjna definicja tego, co robi funkcja, zgodnie ze specyfikacją ECMAScript, a nie intuicyjne skojarzenia z matematyki szkolnej. Kluczowe jest zapamiętanie różnicy: floor – zawsze w dół, ceil – zawsze w górę, round – do najbliższej liczby całkowitej, sqrt – pierwiastek, exp – funkcja wykładnicza. Dobra praktyka w JavaScripcie to zawsze sprawdzić dokumentację, gdy nie jesteśmy na 100% pewni, co robi dana metoda Math, bo drobna pomyłka przy zaokrąglaniu może później rozwalić logikę całej aplikacji, chociażby przy indeksowaniu tablic, generowaniu ID czy przy obliczeniach finansowych.