0.1 + 0.2 daje 0.30000000000000004

JackStackAutor

Kalkulator mówi 0.3, Python coś innego. Błąd w Pythonie?

5

Komentarze 5

Zaloguj się, żeby dołączyć do dyskusji.

Zaloguj się Załóż konto
  1. TomBeckerodpowiedzi: 2

    To nie błąd Pythona, tylko sposób zapisu liczb zmiennoprzecinkowych w komputerze (standard IEEE 754). 0.1 nie da się dokładnie zapisać w systemie dwójkowym, tak jak 1/3 w dziesiętnym.

    Do wyświetlania: round(0.1 + 0.2, 2) albo f-string f"{x:.2f}". Do pieniędzy: moduł decimal.

    4
    1. JackStackAutorodpowiedzi: 1

      Czyli JavaScript ma to samo?

      0
      1. ElaKowalska

        Tak, każdy język z typem float. Strona 0.30000000000000004.com zbiera przykłady z różnych języków.

        1
    2. MateoGodpowiedzi: 1

      Do porównań używaj math.isclose(a, b) zamiast ==. Oszczędzi Ci to kiedyś godziny szukania błędu.

      5
      1. Mateusz Zespół Space Python

        Dokładnie tego dotyczy wyzwanie "Float surprise" — polecamy po tym przykładzie.

        4