INF.03 · pytanie 271
Technik informatykTechnik programista
W formularzu dane z pola input o typie number zostały zapisane do zmiennej a, a następnie przetworzone w skrypcie JavaScript w następujący sposób. Zmienna z będzie typu

- ANaN
- Bnapisowego
- CzmiennoprzecinkowegoPoprawna
- Dliczbowego, całkowitego
Wyjaśnienie
Odpowiedź „zmiennoprzecinkowego” dobrze oddaje działanie funkcji parseFloat(a). Dane pobrane z pola formularza, nawet z input type="number", w praktyce bardzo często trafiają do JavaScriptu jako tekst, np. wartość właściwości value to napis typu "12.5". Funkcja parseFloat próbuje odczytać z takiego tekstu liczbę z częścią dziesiętną i zwraca wartość liczbową, np. parseFloat("3.14") da 3.14. W JavaScripcie trzeba tylko pamiętać o ważnym szczególe: formalnie typ zwracany przez parseFloat to Number, czyli ten sam typ dla liczb całkowitych i ułamkowych. Nie ma osobnego typu float jak np. w C++ czy Javie. Silnik JS przechowuje liczby według standardu IEEE 754 jako wartości zmiennoprzecinkowe podwójnej precyzji, więc odpowiedź z punktu widzenia zadania jest poprawna. Praktycznie używa się tego przy obliczeniach z formularzy: ceny, wagi, procenty, pola zamówienia itd. Dobra praktyka to po konwersji sprawdzić wynik przez Number.isNaN(x), bo parseFloat("abc") zwróci NaN, a dalsze obliczenia mogą się wtedy dziwnie rozsypać. Moim zdaniem to jeden z tych drobiazgów w JS, które warto ogarnąć wcześnie, bo formularze bez konwersji typów potrafią dawać bardzo mylące wyniki, np. "2" + "3" daje "23", a nie 5.