peters2004
2.06.2015, 07:09:31
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
2.06.2015, 07:16:43
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
2.06.2015, 07:17:37
Spróbuj użyć funkcji var_dump i sprawdź typ, bo może masz to jako string i rzutuj do typu (float).
Pyton_000
2.06.2015, 07:23:51
To czy ma string to nie jest istotne, istotne jest żeby zamiast , była . w tym stringu
peters2004
2.06.2015, 07:29:11
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
2.06.2015, 07:31:05
a gdzie kod?
daniel1302
2.06.2015, 07:37:41
a Spróbuj tak zrobić:
$string = "10,34";
peters2004
2.06.2015, 07:45:43
daniel1302
2.06.2015, 07: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
peters2004
2.06.2015, 07:54:07
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
Pyton_000
2.06.2015, 07:55:26
daniel1302
2.06.2015, 07:58:52
a zrób zamiast echa takie coś
var_dump(json_encode($ZMIENNA)); i sprawdź czy zamiast kropki nie ma dziwnego znaku
peters2004
2.06.2015, 08:04:16
string(13) "{"0":"27.77"}"
daniel1302
2.06.2015, 08: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]);
peters2004
2.06.2015, 08:11:29
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
2.06.2015, 08:15:25
Możesz w końcu dać wynik polecenia tego co Ci dałem zamiast bawić się w jakieś durne jsony?
daniel1302
2.06.2015, 08:16:36
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.
$string = '{"0":"27.77"}';
$arr = json_decode($string);
i Taki kod też zwraca obiekt:
object(stdClass)[1]
public '0' => string '27.77' (length=5)
peters2004
2.06.2015, 08:23:05
zmieniłem na $cena_brutto = $cena_netto[0]*$mul;
wynik bez zmian
27.77 * 1.08 daje 29.16937
a powinno 29.9916
daniel1302
2.06.2015, 08:29:31
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
2.06.2015, 09:36:51
Cytat(Pyton_000 @ 2.06.2015, 08:55:26 )

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.