Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Warunek if nie sprawdza dla pewnych wartości
bulimaxiu
post 21.05.2009, 20:09:31
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 (1 - 10)
maly_swd
post 21.05.2009, 20:35:04
Post #2





Grupa: Zarejestrowani
Postów: 744
Pomógł: 118
Dołączył: 14.02.2009
Skąd: poziome

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


ż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


--------------------
śmieszne obrazki
Kryzys: Ser jem spleśniały, wino piję stare i samochód mam bez dachu..
Go to the top of the page
+Quote Post
okitoki
post 21.05.2009, 20:38:28
Post #3





Grupa: Zarejestrowani
Postów: 214
Pomógł: 18
Dołączył: 25.04.2009

Ostrzeżenie: (20%)
X----


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;
     }
?>


--------------------
Go to the top of the page
+Quote Post
piotrooo89
post 21.05.2009, 20:40:47
Post #4


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




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.


--------------------
Go to the top of the page
+Quote Post
okitoki
post 21.05.2009, 20:46:03
Post #5





Grupa: Zarejestrowani
Postów: 214
Pomógł: 18
Dołączył: 25.04.2009

Ostrzeżenie: (20%)
X----


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


--------------------
Go to the top of the page
+Quote Post
bim2
post 21.05.2009, 20:52:01
Post #6





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

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


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


--------------------
Go to the top of the page
+Quote Post
okitoki
post 21.05.2009, 21:15:46
Post #7





Grupa: Zarejestrowani
Postów: 214
Pomógł: 18
Dołączył: 25.04.2009

Ostrzeżenie: (20%)
X----


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.


--------------------
Go to the top of the page
+Quote Post
bim2
post 21.05.2009, 21:41:56
Post #8





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
okitoki
post 21.05.2009, 22:25:06
Post #9





Grupa: Zarejestrowani
Postów: 214
Pomógł: 18
Dołączył: 25.04.2009

Ostrzeżenie: (20%)
X----


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


--------------------
Go to the top of the page
+Quote Post
bulimaxiu
post 22.05.2009, 06:19:33
Post #10





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

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


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
Go to the top of the page
+Quote Post
okitoki
post 22.05.2009, 06:42:31
Post #11





Grupa: Zarejestrowani
Postów: 214
Pomógł: 18
Dołączył: 25.04.2009

Ostrzeżenie: (20%)
X----


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


--------------------
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: 24.07.2025 - 18:32