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
okitoki
post
Post #2





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

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


przyjacielu strasznie to masz zawiłe (IMG:http://forum.php.pl/style_emoticons/default/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

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: 16.09.2025 - 04:46