Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Warunek if nie sprawdza dla pewnych wartości
bulimaxiu
post
Post #1





Grupa: Zarejestrowani
Postów: 83
Pomógł: 0
Dołączył: 18.06.2008
Skąd: Reda

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


Witam.

Nie mogę sobie poradzić z pewnym niezrozumiałym zachowaniem pętli if. Poniższa funkcja m.in. dodaje zera do wartości liczbowych np. z $cena="6,2" robi $cena="6,20"
  1. <?php
  2. function cena($cena, $config = false) {
  3.            if ($config) {
  4.                  # Konwersja z trybu tekstowego na obliczeniowy
  5.                  # ...
  6.            } else {
  7.                  # Konwersja z trybu obliczeniowego na tekstowy
  8.                  if (!empty($cena) AND strpos($cena, ",") === false) {
  9.                        if ($cena            == (int) $cena      ) {
  10.                              $cena = $cena . ",00";
  11.                        } else if ($cena*10  == (int) ($cena*10)) {          # Tu jest problem
  12.                              $cena = $cena . "0";
  13.                        } else if ($cena*100 == (int) ($cena*100)) {
  14.                              $cena = $cena  . "";
  15.                        }
  16.                  }
  17.                  $cena = str_replace(".", ",", $cena);
  18.            }
  19.            return $cena;
  20.      }
  21. ?>


Problem polega na tym, że dla przykładowych wartości: "644,6", "322,3" w niektórych sytuacjach, wskazane ww porównanie nie reaguje na te liczby. Liczby te powstają z działania "64,46*10" oraz "64,46*5". Pokusiłem się o testową wersję kodu:
  1. <?php
  2. $cena = "644.6";
  3. if ($cena*10 == (int) ($cena*10)) {
  4. echo "OK";
  5. } else {
  6. echo "nieOK";
  7. }
  8. ?>

i ten kod zadziałał prawidłowo. Mogę dodać, że wartości brane przez funkcję będące wynikiem matematycznym chodzą dobrze, a będące daną z mySQL'a już nie. Analizowałem linia po linii odpowiedniej sekcji z pokazywaniem wartości chwilowych i wszystkie wyglądają prawidłowo. Jak myślicie, gdzie mam szukać przyczyny takiej sytuacji?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
bim2
post
Post #2





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

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


maly_swd napisał poprawne rozwiązanie. I teoretycznie na tym topic powinien się zakończyć. Jednak ty postanowiłeś, że inteligentnie będzie dopisać coś swojego i pokazać że potrafisz. Zresztą nie musisz mi się tłumaczyć, masz dwa ładne ostrzenia, a wydaje mi się, że ciężko je zdobyć :] Przynajmniej mi się nie udało. (może coś się zmieni?).

Później tłumaczysz się że nie wiedziałeś itd. Tłumaczą się winni. Przykro mi ale to że "czasami piszesz swój pomysł" nie wystarcza. Trzeba jeszcze pomyśleć czy użytkownikowi nei namieszasz w głowei 10 rozwiązaniami. Teraz pewnie nie wejdzie w manual bo po co jak Ty podałeś mu rozwiązanie. I tak rodzi się kolejny ignorant, który będzie myślał, że każdy poda mu wszystko na tacy (Nie mam nic do bulimaxiu, po prostu zazwyczaj tak jest. Z czasem zobaczymy).

Nie, nie jest ciężko analizować fragmenty, kiedy autor SPECJALNIE zostawił komentarz do kodu, żeby każdy zrozumiał o co autorowi posta chodzi. Po ifce i komentarzach można było dojść do czego służy funkcja cena().
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: 5.10.2025 - 02:39