Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Bardzo dziwne rzutowanie float na int
Forum PHP.pl > Forum > PHP
barcisz
Prosty kod:
  1. $a = 270.4 * 100;
  2. echo $a;
  3. echo (int)$a;


Daje wynik:
Kod
27040
27039


Jest ktoś w stanie wytłumaczyć dlaczego tak się dzieje?
Thorang Hoog
Cytując książkę php5: programowanie
Cytat
Wartości zmiennoprzecinkowe są tylko przybliżonymi przedstawieniami liczb. Na przykład 3,5 jest w wielu systemach przedstawione jako 3,4999999999. Oznacza to, że należy próbować uniknąć pisania kodu, który przyjmuje, że liczby zmiennoprzecinkowe są przedstawiane dokładnie, jak również unikać porównywania dwóch wartości zmiennoprzecinkowych przy użyciu znaku ==. Zazwyczaj stosuje się porównanie do kilkudziesięciu miejsc po przecinku:
  1. if ( int($a * 1000) == int ($b * 1000 )){
  2. #liczby równe do trzech miejsc po przecinku
  3. }


Różne języki programowania różnie interpretują liczby zmiennoprzecinkowe. Dużo zależy od procesora twojej maszyny.
Możesz użyć rozszeżeń BCMath lub GMP
irmidjusz
pomaga też taki sposób rzutowania float na int:
  1. echo (int) round($a, 0);
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.