Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript]błędy w liczeniu
Forum PHP.pl > Forum > Przedszkole
elmozaur
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

PrinceOfPersia
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.

elmozaur
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 ...
Pyton_000
a fixed ci nie wystarczy?
elmozaur
potestuje na roznych kwotach i ilosciach i zobacze co wyjdzie.

dziekuje za pomoc i wyjasnienie
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.