Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: php nie widzi części ułamkowej
Forum PHP.pl > Forum > PHP
peters2004
Cześć!
Mam trywialny programik, zaczytujący XML-e (jest to import z Symfonii).
No i sobie dane czyta, np cenę 27.77 Okazuje się, że np przy mnożeniu, php nie widzi części ułamkowej.
Nie wiem o co chodzi- na wydruku kontrolnym, naprawdę jest tam kropka a nie przecinek.


pozdrawiam
Pyton_000
Przeczytać to sobie możesz książkę.
Lepiej sprawdź czy faktycznie w zmiennej która jest mnożona jest wartość która tam powinna być i jest taka jak powinna być
daniel1302
Spróbuj użyć funkcji var_dump i sprawdź typ, bo może masz to jako string i rzutuj do typu (float).
Pyton_000
To czy ma string to nie jest istotne, istotne jest żeby zamiast , była . w tym stringu
peters2004
Cytat(Pyton_000 @ 2.06.2015, 08:23:51 ) *
To czy ma string to nie jest istotne, istotne jest żeby zamiast , była . w tym stringu


Też mi się tak wydaje, bo jak do tej zmiennej ordynarnie podstawię string z liczbą - to mnoży prawidłowo. A kropka jest, sprawdzałem nawet kody ascii w importowanym xml-u
Pyton_000
a gdzie kod?
daniel1302
a Spróbuj tak zrobić:

  1. $string = "10,34";
  2. var_dump($string);
  3. $string = str_replace(',', '.', $string);
  4. echo '<br />';
  5. var_dump((float)$string);
peters2004
http://test.medlife.pl/import_xml.txt

problem w linii 115 -
daniel1302
A robiłeś var_dump() na zmiennej $cena_brutto? Czy poprostu w bazie danych masz stałą wartość? Czy aby w bazie nie masz na polu INT zamiast DOUBLE?

Na przyszłosc kod wrzucaj do pastebin.com albo wklejto.pl
peters2004
Cytat(daniel1302 @ 2.06.2015, 08:50:10 ) *
A robiłeś var_dump() na zmiennej $cena_brutto? Czy poprostu w bazie danych masz stałą wartość? Czy aby w bazie nie masz na polu INT zamiast DOUBLE?

Na przyszłosc kod wrzucaj do pastebin.com albo wklejto.pl


Do bazy danych to ja dopiero zapisuję wynik. To jest import z xml-a. I zapewniem, że jest tam kropka a nie przecinek. Jak dałem echo po mnożeniu, to widzę iż nie uwzględnia części ułamkowej smile.gif
Pyton_000
wynik w 116 linijce z
  1. echo '<pre>'; var_dump($cena_netto, $mul, $cena_bazowa); echo'</pre>';
daniel1302
a zrób zamiast echa takie coś

var_dump(json_encode($ZMIENNA)); i sprawdź czy zamiast kropki nie ma dziwnego znaku
peters2004
string(13) "{"0":"27.77"}"
daniel1302
No to z tego co widzę masz obiekt(JS)- Tablice w php a nie String. Spróbuj dać takie coś var_dump($zmienna[0]);

peters2004
Cytat(daniel1302 @ 2.06.2015, 09:09:35 ) *
No to z tego co widzę masz obiekt(JS)- Tablice w php a nie String. Spróbuj dać takie coś var_dump($zmienna[0]);

w takim razie, czemu echo wyświetla wartość a nie wypisuje, iż to tablica?
Pyton_000
Możesz w końcu dać wynik polecenia tego co Ci dałem zamiast bawić się w jakieś durne jsony?
daniel1302
Nie mam pojęcia, ale echo nie nadaje się do debugu, można sobie wyświetlać tekst co najwyżej tym. Z JSON'a widać, że jest to obiekt.

  1. $string = '{"0":"27.77"}';
  2. $arr = json_decode($string);
  3. var_dump($arr);


i Taki kod też zwraca obiekt:

  1. object(stdClass)[1]
  2. public '0' => string '27.77' (length=5)


peters2004
zmieniłem na $cena_brutto = $cena_netto[0]*$mul;
wynik bez zmian
27.77 * 1.08 daje 29.16937
a powinno 29.9916
daniel1302
Nie rozumiem Cię, jeśli to była by liczba całkowita to wynik byłby 27.16 a tutaj jest prawie 27.17 czyli coś źle podajesz.

Zrób jak powiedział Pyton i pokaż co zwraca Ci var_dump. Musisz nauczyć się sam debugować skrypty nikt nie zgadnie co jest nie tak dopuki nie pomozesz...
peters2004
Cytat(Pyton_000 @ 2.06.2015, 08:55:26 ) *
wynik w 116 linijce z
  1. echo '<pre>'; var_dump($cena_netto, $mul, $cena_bazowa); echo'</pre>';


object(SimpleXMLElement)#10 (1) {
[0]=>
string(5) "27.77"
}
float(1.08)
object(SimpleXMLElement)#9 (1) {
[0]=>
string(5) "22.37"
}

rozwiązaniem jest dodanie konwersji string na float, czyli dodanie (float)
ale dlaczego to było konieczne, pojęcia nie mam
pozdrawiam
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.