Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> php nie widzi części ułamkowej
peters2004
post
Post #1





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 6.10.2014

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


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
Go to the top of the page
+Quote Post
Pyton_000
post
Post #2





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


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ć
Go to the top of the page
+Quote Post
daniel1302
post
Post #3





Grupa: Zarejestrowani
Postów: 602
Pomógł: 30
Dołączył: 1.08.2007
Skąd: Nowy Sącz

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


Spróbuj użyć funkcji var_dump i sprawdź typ, bo może masz to jako string i rzutuj do typu (float).
Go to the top of the page
+Quote Post
Pyton_000
post
Post #4





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


To czy ma string to nie jest istotne, istotne jest żeby zamiast , była . w tym stringu
Go to the top of the page
+Quote Post
peters2004
post
Post #5





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 6.10.2014

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


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
Go to the top of the page
+Quote Post
Pyton_000
post
Post #6





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


a gdzie kod?
Go to the top of the page
+Quote Post
daniel1302
post
Post #7





Grupa: Zarejestrowani
Postów: 602
Pomógł: 30
Dołączył: 1.08.2007
Skąd: Nowy Sącz

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


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);
Go to the top of the page
+Quote Post
peters2004
post
Post #8





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 6.10.2014

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


http://test.medlife.pl/import_xml.txt

problem w linii 115 -

Ten post edytował peters2004 2.06.2015, 14:00:53
Go to the top of the page
+Quote Post
daniel1302
post
Post #9





Grupa: Zarejestrowani
Postów: 602
Pomógł: 30
Dołączył: 1.08.2007
Skąd: Nowy Sącz

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


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

Ten post edytował daniel1302 2.06.2015, 07:51:01
Go to the top of the page
+Quote Post
peters2004
post
Post #10





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 6.10.2014

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


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 (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Pyton_000
post
Post #11





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


wynik w 116 linijce z
  1. echo '<pre>'; var_dump($cena_netto, $mul, $cena_bazowa); echo'</pre>';
Go to the top of the page
+Quote Post
daniel1302
post
Post #12





Grupa: Zarejestrowani
Postów: 602
Pomógł: 30
Dołączył: 1.08.2007
Skąd: Nowy Sącz

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


a zrób zamiast echa takie coś

var_dump(json_encode($ZMIENNA)); i sprawdź czy zamiast kropki nie ma dziwnego znaku
Go to the top of the page
+Quote Post
peters2004
post
Post #13





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 6.10.2014

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


string(13) "{"0":"27.77"}"
Go to the top of the page
+Quote Post
daniel1302
post
Post #14





Grupa: Zarejestrowani
Postów: 602
Pomógł: 30
Dołączył: 1.08.2007
Skąd: Nowy Sącz

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


No to z tego co widzę masz obiekt(JS)- Tablice w php a nie String. Spróbuj dać takie coś var_dump($zmienna[0]);

Go to the top of the page
+Quote Post
peters2004
post
Post #15





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 6.10.2014

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


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?
Go to the top of the page
+Quote Post
Pyton_000
post
Post #16





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Możesz w końcu dać wynik polecenia tego co Ci dałem zamiast bawić się w jakieś durne jsony?
Go to the top of the page
+Quote Post
daniel1302
post
Post #17





Grupa: Zarejestrowani
Postów: 602
Pomógł: 30
Dołączył: 1.08.2007
Skąd: Nowy Sącz

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


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)


Go to the top of the page
+Quote Post
peters2004
post
Post #18





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 6.10.2014

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


zmieniłem na $cena_brutto = $cena_netto[0]*$mul;
wynik bez zmian
27.77 * 1.08 daje 29.16937
a powinno 29.9916
Go to the top of the page
+Quote Post
daniel1302
post
Post #19





Grupa: Zarejestrowani
Postów: 602
Pomógł: 30
Dołączył: 1.08.2007
Skąd: Nowy Sącz

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


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...
Go to the top of the page
+Quote Post
peters2004
post
Post #20





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 6.10.2014

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


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
Go to the top of the page
+Quote Post

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: 22.08.2025 - 19:57