Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: obliczanie ceny z vatem i ilością towaru
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
!*!
Starałem się napisać samemu funkcję która obliczy cenę brutto z podanej ceny netto, vatu i ilości sztuk:

[JAVASCRIPT] pobierz, plaintext
  1. function obliczznetto(e) {
  2.  
  3. //pobranie po id ilosci sztuk
  4. var ilosc = document.getElementById('ilosc'+e).value;
  5. //sprawdzenie czy ilosc to liczba oraz musi byc minimum ustawiona na 1
  6. if (isNaN(ilosc) || (ilosc == 0)) {document.getElementById('ilosc'+e).value = '1'}
  7.  
  8. //pobranie po id pola netto
  9. var netto = document.getElementById('netto'+e).value;
  10.  
  11. //pobranie po id pola vat
  12. var vat = document.getElementById('vat'+e).value;
  13.  
  14. //zamiana przecinka na kropkę
  15. var cena = netto.replace(',', '.')
  16.  
  17. //w razie problemów (nie jest liczbą lub mniejsze od 0) skasowanie zawartości i ustawienie kursora w odpowiednim polu
  18. if (isNaN(cena) || (cena < 0)) {
  19. document.getElementById('netto'+e).value = ''
  20. alert('wpisz cenę netto')
  21. document.getElementById('netto'+e).focus()
  22. }
  23. else {
  24. cena=cena * ilosc + vat;
  25.  
  26. document.getElementById('brutto'+e).value = cena;
  27. }
  28.  
  29. /*alert(cena*ilosc)*/
  30. }
[JAVASCRIPT] pobierz, plaintext


  1. <form name="form" id="form" action="" method="post">
  2. Ilosc tego szajsu: <input type="text" id="ilosc1" name="ilosc1" onkeyup="obliczznetto('1')" value="1"/><br />
  3.  
  4. Cena netto: <input type="text" id="netto1" name="netto1" onkeyup="obliczznetto('1')" value=""/><br />
  5.  
  6. Stawka VAT: <select id="vat1" name="vat1" size="0" ><option value="22">22%</option><option value="7">7%</option><option value="3">3%</option></select><br />
  7.  
  8. Kwota vat: <input type="text" id="kwotavat1" name="kwotavat1" value="" /><br />
  9.  
  10. Cena brutto: <input type="text" id="brutto1" name="brutto1" value="" readonly="readonly" />
  11. </form>


Jednak nie wiem, jak uzyskać cenę brutto z groszami, dwa miejsca po przecinku... na forum znalazłem taki kod:

[JAVASCRIPT] pobierz, plaintext
  1. cena = new String(Math.round(cena * 100 * (1 + vat)))
  2. var dlugosc = cena.length
  3.  
  4. switch (dlugosc) {
  5. case 1:
  6. cena = '0,0' + cena
  7. break
  8. case 2:
  9. cena = '0,' + cena
  10. break
  11. default:
  12. cena = cena.substring(0, dlugosc - 2) + ',' + cena.substring(dlugosc - 2)
  13. }
[JAVASCRIPT] pobierz, plaintext


Jednak po jego zastosowaniu cena jest nieprawidłowa.
skowron-line
toFixed(2) wstawi Ci 2 miejsca po przecinku.
!*!
Dzięki za naprowadzenie, zrobiłem coś takiego:

[JAVASCRIPT] pobierz, plaintext
  1. function obliczznetto(e) {
  2.  
  3. //pobranie po id ilosci sztuk
  4. var ilosc = document.getElementById('ilosc'+e).value;
  5. //sprawdzenie czy ilosc to liczba oraz musi byc minimum ustawiona na 1
  6. if (isNaN(ilosc) || (ilosc == 0)) {document.getElementById('ilosc'+e).value = '1'}
  7.  
  8. //pobranie po id pola netto
  9. var netto = document.getElementById('netto'+e).value;
  10.  
  11. //pobranie po id pola vat
  12. var vat = document.getElementById('vat'+e).value;
  13.  
  14. if(vat == 0.22) {var vat = 0.22}
  15. if(vat == 0.07) {var vat = 0.07}
  16. if(vat == 0.03) {var vat = 0.03}
  17.  
  18. //zamiana przecinka na kropkę
  19. var cena = netto.replace(',', '.')
  20.  
  21. //w razie problemów (nie jest liczbą lub mniejsze od 0) skasowanie zawartości i ustawienie kursora w odpowiednim polu
  22. if (isNaN(cena) || (cena < 0)) {
  23. document.getElementById('netto'+e).value = ''
  24. alert('wpisz cenę netto')
  25. document.getElementById('netto'+e).focus()
  26. }
  27. else {
  28. dodajilosc = cena * ilosc;
  29. dodajvat = dodajilosc * (1+ vat)
  30. cenabrutto = new Number(dodajvat);
  31. var cenabrutto = cenabrutto.toFixed(2)
  32.  
  33.  
  34.  
  35. document.getElementById('brutto'+e).value = cenabrutto;
  36. }
  37.  
  38. /*alert(cena*ilosc)*/
  39. }
[JAVASCRIPT] pobierz, plaintext


I działa bez problemu, jednak nie rozumiem dlaczego w "dodajvat" nie łapie wartości inputa i trzeba użyć instrukcji warunkowych. Natomiast wpisanie ręcznie (1+0.22) działa ... I jak teraz z tego obliczyć kwotę vat?
skowron-line
Z inputa zawsze idą stringi a do działań matematycznych używa się float i int.
parseFloat() i parseInt() będą tu pomocne.
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.