Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Warunek if nie sprawdza dla pewnych wartości
Forum PHP.pl > Forum > PHP
bulimaxiu
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?
maly_swd
że tak niedyskretnie spytam, co robi ta funkcja:)?
Czy przez przypadek niewynajdujesz jeszcze raz "koła".
W php sa specjalne funkcje formatujace
echo number_format("234.3", 2, ',', ' ');
http://pl.php.net/number%20format
http://pl.php.net/sprintf
okitoki
przyjacielu strasznie to masz zawiłe smile.gif, nie łatwiej było by tak

Kod
<?php
function cena($cena, $config = false) {
           if ($config) {
                 # Konwersja z trybu tekstowego na obliczeniowy
                 # ...
           } else {
                     # Konwersja z trybu obliczeniowego na tekstowy
                    $cena = str_replace(',','.',$cena);
                    $cena = sprintf("%01.2f", $cena);
                     }
           return $cena;
     }
?>
piotrooo89
Cytat(okitoki @ 21.05.2009, 21:38:28 ) *
przyjacielu strasznie to masz zawiłe smile.gif , nie łatwiej było by tak



ale jeszcze prościej użyć gotowych funkcji, co jest również bardziej wydajniejsze.
okitoki
Cytat(piotrooo89 @ 21.05.2009, 21:40:47 ) *
ale jeszcze prościej użyć gotowych funkcji, co jest również bardziej wydajniejsze.


no wiesz nie wiem co autor piszący funkcję cena miał na myśli z tym parametrem config, wiec nie przerabiałem zbytnio jego wypocin smile.gif
bim2
okitoki, to czytaj dokładniej. Ładnie w komentarzu przy kodzie pisze.
Cytat
# Konwersja z trybu tekstowego na obliczeniowy

Nie wiem, ale moderatorzy powinni Ci się przypatrzeć, bo jak czytam twoje posty to mam dziwne wrażenie że nabijasz sobie po prostu licznik ...
okitoki
Cytat(bim2 @ 21.05.2009, 21:52:01 ) *
okitoki, to czytaj dokładniej. Ładnie w komentarzu przy kodzie pisze.

Nie wiem, ale moderatorzy powinni Ci się przypatrzeć, bo jak czytam twoje posty to mam dziwne wrażenie że nabijasz sobie po prostu licznik ...

bim2 czasami staram się pomóc, czasami piszę swój pomysł, a co do licznika jest za to jakaś nagroda ?

ciężko analizować fragmenty kodu, a z kropek i komentarzy nie wynika co autor ma na myśli i co autor za to wsadzi, wiec zostawiłem to bez zmian.
bim2
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().
okitoki
Cytat(bim2 @ 21.05.2009, 22:41:56 ) *
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?).


no tak nasze odpowiedzi się pokryły, jak zacząłem pisać swoją to jeszcze nie było posta maly_swd
bulimaxiu
Witajcie.
Cóż, licznika nie nabijam, a poza tym nie śmiał bym zaśmiecać forum tylko dla jakiś ilości.
Kropki to część kodu, która tu nie ma znaczenia po prostu. $config to przełącznik funkcji (oblicz-> tekst, czy tekst-> oblicz).
Jeszcze nie znam wielu funkcji, na razie praktykuję i odkrywam coraz to nowe rzeczy. Jak znam życie rozwiązania Wasze spełnią swe zadanie i na pewno to zapamiętam. Może jeszcze powinienem pisać w przedszkolu.
I raczej myślę, że EOT.

Pozdrawiam.
Sebastian
okitoki
Cytat(bulimaxiu @ 22.05.2009, 07:19:33 ) *
Witajcie.
Cóż, licznika nie nabijam, a poza tym nie śmiał bym zaśmiecać forum tylko dla jakiś ilości.
Kropki to część kodu, która tu nie ma znaczenia po prostu. $config to przełącznik funkcji (oblicz-> tekst, czy tekst-> oblicz).
Jeszcze nie znam wielu funkcji, na razie praktykuję i odkrywam coraz to nowe rzeczy. Jak znam życie rozwiązania Wasze spełnią swe zadanie i na pewno to zapamiętam. Może jeszcze powinienem pisać w przedszkolu.
I raczej myślę, że EOT.

Pozdrawiam.
Sebastian


spoko smile.gif kolega mnie miał na myśli 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.