Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php] Porównywanie dwóch liczb (błąd php?)
Jarod
post
Post #1





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

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


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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Cezar708
post
Post #2





Grupa: Zarejestrowani
Postów: 1 116
Pomógł: 119
Dołączył: 10.05.2005
Skąd: Poznań

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


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

Posty w temacie


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: 7.10.2025 - 22:18