Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Porównywanie dwóch liczb (błąd php?)
Forum PHP.pl > Forum > Przedszkole
Jarod
Banalny przykład:
  1. <?php
  2. $a="12:00";
  3. $b="22:00";
  4. $c="12:01";
  5. $d="22:01";
  6.  
  7. $a=(float)str_replace(':', '.', $a);
  8. $b=(float)str_replace(':', '.', $b);
  9. $c=(float)str_replace(':', '.', $c);
  10. $d=(float)str_replace(':', '.', $d);
  11.  
  12. $x = $b-$a;
  13. $y = $d-$c;
  14.  
  15. if ($x == $y) echo 'są równe';
  16. if ($x < $y) echo 'x jest mniejsze';
  17. if ($x > $y) echo 'x jest większe';
  18. ?>


Proszę wytłumaczcie dlaczego php twierdzi, że x jest mniejsze?? Przecież wartości x i y są takie same i typu float.
Cezar708
Cytat
Warning
Floating point precision

It is typical that simple decimal fractions like 0.1 or 0.7 cannot be converted into their internal binary counterparts without a small loss of precision. This can lead to confusing results: for example, floor((0.1+0.7)*10) will usually return 7 instead of the expected 8, since the internal representation will be something like 7.9.

This is due to the fact that it is impossible to express some fractions in decimal notation with a finite number of digits. For instance, 1/3 in decimal form becomes 0.3.

So never trust floating number results to the last digit, and never compare floating point numbers for equality. If higher precision is necessary, the arbitrary precision math functions and gmp functions are available.


źródło: Floating point numbers

a więc "zwykłe" porównywanie dwóch floatów jest niewskazane

Pozdrawiam
Jarod
Dzięki, działa, masz plusa.
Powiedz mi tylko czy na ta bibliotek jest wkompilowana w php domyślnie? Czy można trafić na serwer z php bez biblioteki?
Cezar708
z tego co się orientuję bcmath jest wkompilowane, co do gmp to chyba trza dokompilować,

... ale za pewność tego posta nie dam sobie ręki uciąć winksmiley.jpg

Pozdrawiam
Cezar708
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.