Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [JavaScript]błędy w liczeniu
elmozaur
post
Post #1





Grupa: Zarejestrowani
Postów: 518
Pomógł: 18
Dołączył: 21.07.2008

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


Witam.
Poraz pierwszy spotykam sie z tego typu problemem wiec prosze o pomoc.
Napisalem prosty skrypt pobierajacy ajaxem z bazy produkty.
Calosc generuje sie w formie tabelki z polami typu input (produkt, cena, ilosc, do_zaplaty).
Globalnie dopiasalem cos takiego, ze po nacisnieciu entera przegladarka nie wysyla formularza tylko przelicza ilosci kwoty i podaje calkowity koszt zakupu.
Logika liczenia oparta jest o Javascript/jQuery
[JAVASCRIPT] pobierz, plaintext
  1. $('.prId').each(function(){
  2. var iId = $(this).attr('id');
  3. var tmpCenaZaSzt = $('#prCenaZaSzt'+iId).val();
  4. var tmpIlosc = $('#prIloscSzt'+iId).val();
  5. var tmpCena = parseFloat(tmpCenaZaSzt) * parseInt(tmpIlosc);
  6. alert(tmpCena);
  7. });
[JAVASCRIPT] pobierz, plaintext

Generalnie to dziala ale czasami pojawiają się błędy w liczeniu np:
dla ceny 35.07 i ilosci 3 wynik wychodzi 105.21000000000001
dla tej samej ceny i ilosci 1 lub 2 lub 4 lub 5 jest OK
przy ilosci 6 lub 12 wychodzi odpowiednio 210.42000000000002 oraz 420.84000000000003.

Pytanie: dlaczego wyliczane sa te dodatkowe "000000000001","000000000002","000000000003" ?
Wygooglalem ze moge uzyc toFixed(2) i raz jeszcze parseFloat ale co w tym przypadku generuje takie bledy ?

za wszelkie informacje z gory dziekuje
Grzegorz

Go to the top of the page
+Quote Post
PrinceOfPersia
post
Post #2





Grupa: Zarejestrowani
Postów: 717
Pomógł: 120
Dołączył: 18.04.2009

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


Cytat
co w tym przypadku generuje takie bledy ?

Operacje na liczbach zmiennoprzecinkowych. Tak już jest. Np. według Pythona 1.2 + 1.4 = 2.5999999999999996. Deal with it.
Co innego jak masz liczby całkowite (typ int z C, integer z Pascala itp.), ale niestety JavaScript traktuje wszystkie liczby jako liczby zmiennoprzecinkowe.



--------------------
Go to the top of the page
+Quote Post
elmozaur
post
Post #3





Grupa: Zarejestrowani
Postów: 518
Pomógł: 18
Dołączył: 21.07.2008

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


a mozna temu jakos zaradzic ?
Moze jakas zamiana cen (cena * 100) potem rzutowanie na int nastepnie wykonac operacje mnozenia razy ilosc i potem podzielic przez 100 i zrzutowac na float ?
tylko to straszny narzut obliczen ...
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%)
-----


a fixed ci nie wystarczy?
Go to the top of the page
+Quote Post
elmozaur
post
Post #5





Grupa: Zarejestrowani
Postów: 518
Pomógł: 18
Dołączył: 21.07.2008

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


potestuje na roznych kwotach i ilosciach i zobacze co wyjdzie.

dziekuje za pomoc i wyjasnienie
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 Aktualny czas: 20.08.2025 - 08:40