Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Porównanie typów. Konwersja string do float.
Forum PHP.pl > Forum > PHP
007slawek
Mam coś takiego:

  1. $a = (float) "27.8000";
  2. $b = (float) "27.9000";
  3. $c = (float) "0.10";
  4.  
  5. $d = $b - $c; //To powinno być równe $a
  6.  
  7. var_dump($a); // zwraca : float(27.8)
  8. var_dump($d); // zwraca : float(27.8)
  9.  
  10. if($a == $d){
  11. echo 'true';
  12. }
  13. else{
  14. echo 'false';
  15. }

Niestety porównanie $a z $d daje false mimo tego, że var_dump pokazuje te same typy i te same wartości.
Użycie
  1. if($a === $d)
też zwraca false.
Dopiero jak wstawię przed var_dump np.

  1. $a = round($a,4);
  2. $d = round($d,4);


to wtedy porównanie zwraca true a var_dump w obu przypadkach bez zmian pokazuje float(27.8).

Ktoś mi wytłumaczy o co chodzi, bo chyba jeszcze śpię?

nospor
Przy liczbach rzeczywistych zawsze będziesz miał takie kwiatki - norma. Nawet jak wizualnie wygląda wszystko na równe, to dla komputera przy liczbach rzeczywistych to równe nie będzie.
007slawek
a masz jakiś pomysł, żeby to działało?
nospor
No ty sam przecież napisałeś rozwiązanie:
  1. $a = round($a,4);
  2. $d = round($d,4);

Innego raczej nie ma. Takie są uroki liczb rzeczywistych
007slawek
myślałem, że jest ktoś mądrzejszy ode mnie:D
nospor
Bo jest, masa osób tongue.gif
Ode mnie zresztą też smile.gif
007slawek
tak tak, Ciebie to już znam
nospor
Nie, nie znasz mnie. Wymieniłeś ze mną jedynie parę PW. Jakby tak oceniać wiedzę drugiego człowieka, na podstawie paru wymienionych zdań, to z pełnym przekonaniem mógłbym napisać że jesteś analfabetą.... wink.gif a oboje wiemy że nie jesteś, więc po paru PW i zamknięciach tematu naprawdę nie można pisać, że się kogoś zna smile.gif
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.