Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> dziwne wyniki przy porównywaniu wartości zmiennych
bogoos
post 14.06.2007, 10:41:18
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 14.06.2007

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


Witam wszystkich
Mam taki kod:
Kod
$cena=floatval($cena);
$fStaraCena=floatval(mysql_result(mysql_query("SELECT products_price FROM products WHERE products_id = '".$id."'"),0,0));
echo "\$cena: ".$cena."<br />\$fStaraCena: ".$fStaraCena."<br />";
if ($cena==$fStaraCena) {echo "Cena bez zmian<br />";}
elseif ($cena>$fStaraCena) {echo "Cena wyższa<br />";}
elseif ($cena<$fStaraCena) {echo "Cena niższa<br/>";}
else {echo "Cos nie tak z cena<br />";};

i otrzymuję takie wyniki:
Cytat
$cena: 284.97
$fStaraCena: 284.97
Cena niższa

lub
Cytat
$cena: 1182.44
$fStaraCena: 1182.44
Cena bez zmian


Dziwne. Zaczałem szukać i zmodyfikowałem kod:
Kod
    $cena=floatval($cena);
    $fStaraCena=floatval(mysql_result(mysql_query("SELECT products_price FROM products WHERE products_id = '".$id."'"),0,0));
    echo "\$cena:".$cena."<br />\$fStaraCena:".$fStaraCena."<br />";
    $roznica=$cena-$fStaraCena;
    if ($roznica==0)
    {
        echo "Cena bez zmian: $roznica<br />";
    }
    elseif ($roznica>0)
    {
        echo "Cena wyższa: $roznica<br />";
    }
    elseif ($roznica<0)
    {
        echo "Cena niższa: $roznica<br/>";
    }
    else
    {
        echo "Cos nie tak z cena: $roznica<br />";
    };


Wyniki tym razem okazały się jeszcze ciekawsze:
Cytat
$cena:75.427
$fStaraCena:75.427
Cena niższa: -1.4210854715202E-014

oraz
Cytat
$cena:152.2185
$fStaraCena:152.2185
Cena bez zmian: 0

Czy ktoś ma jakiś pomysł co może być przyczyną takich wyników?
Go to the top of the page
+Quote Post
Darti
post 14.06.2007, 10:52:53
Post #2





Grupa: Zarejestrowani
Postów: 1 076
Pomógł: 62
Dołączył: 6.03.2005
Skąd: Wroc

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


Faktycznie dziwne.
a spróbuj rzutować w ten sposób:
$zmienna = (float)$zmienna;

i porównywać za pomocą bccomp

Ten post edytował Darti 14.06.2007, 11:02:03


--------------------
The answer is out there, Neo. It's looking for you. And it will find you, if you want it to.
SERVER_SOFTWARE : Apache/2.2.4 (Win32) PHP/5.2.1
MySQL Client API version : 5.0.27
Go to the top of the page
+Quote Post
bogoos
post 14.06.2007, 12:10:30
Post #3





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 14.06.2007

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


Tego nie próbowałem. Pomogło sformatowanie cen przed rzutowaniem:
Kod
$fStaraCena=floatval(number_format($fStaraCena, 2, '.', ''));


Natomiast czemu tak jest to do jest pory nie wiem:(

Ten post edytował bogoos 14.06.2007, 15:41:34
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 7.07.2025 - 11:12