Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Bardzo dziwne rzutowanie float na int
barcisz
post
Post #1





Grupa: Zarejestrowani
Postów: 41
Pomógł: 12
Dołączył: 8.04.2011

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
Thorang Hoog
post
Post #2





Grupa: Zarejestrowani
Postów: 41
Pomógł: 9
Dołączył: 8.02.2009

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
irmidjusz
post
Post #3





Grupa: Zarejestrowani
Postów: 279
Pomógł: 60
Dołączył: 25.02.2012

Ostrzeżenie: (0%)
-----


pomaga też taki sposób rzutowania float na int:
  1. echo (int) round($a, 0);
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 22:51