Źródło: Arkusze CKE
Co zostanie wyświetlone w konsoli po wykonaniu poniższego kodu?
console.log(0.1 + 0.2 === 0.3);
console.log(0.1 + 0.2);
Warianty odpowiedzi
-
A
true, 0.3
-
B
false, 0.3
-
C
false, 0.30000000000000004
-
D
true, 0.30000000000000004
Wyjaśnienie
Wynik tego działania zaskakuje wielu początkujących programistów, ale jest to cecha wspólna dla większości języków programowania.
Liczby zmiennoprzecinkowe są przechowywane w pamięci komputera w systemie binarnym zgodnie ze standardem IEEE 754. Ułamki dziesiętne takie jak 0.1 czy 0.2 nie mają dokładnej reprezentacji w zapisie binarnym, co prowadzi do drobnych błędów zaokrągleń.
Suma 0.1 i 0.2 w pamięci daje w rzeczywistości wynik 0.30000000000000004.
Z tego powodu porównanie tego wyniku z liczbą 0.3 zwraca false.