Temat: Problem z funkcja przeliczania kwot dopłata/netto/brutto...

Witam!
Mam mały problem... pewnie rozwiązanie będzie proste ale ja za długo się wpatruję, żeby to znaleźć albo po prostu za mało chleba zjadłem ;)

Cel: Wpisuję w 3 POLA INPUT kwotę netto, wartość dopłaty w % oraz rabat w %. W 2 POLA niżej ma mi się wyświetlić wartość zlecenia netto z doliczoną dopłatą i odjętym rabatem oraz wartość brutto.

Mam taki oto html:

<li>
<label for="wartosc-zlecenia-netto">WPISZ KWOTĘ - NETTO</label>
<input type="text" onchange="oblicz('wartosc1', 'wartosc2', 'wartosc3', 'wartosc4', 'wartosc5')" name="wartosc-zlecenia-netto" id="wartosc1"/>
</li>
<li>
<label for="doplata">WPISZ DOPŁATĘ W %</label>
<input type="text" onchange="oblicz('wartosc1', 'wartosc2', 'wartosc3', 'wartosc4', 'wartosc5')" name="doplata" id="wartosc2"/>
</li>
<li>
<label for="rabat">WPISZ RABAT W %</label>
<input type="text" onchange="oblicz('wartosc1', 'wartosc2', 'wartosc3', 'wartosc4', 'wartosc5')" name="rabat" id="wartosc3"/>
</li>
<li>
<label for="wartosc-zlecenia-doplata-rabat">KWOTA NETTO Z DOPŁATĄ I PO RABACIE - OBLICZA SIĘ SAMA</label>
<input type="text" readonly="readonly" name="wartosc-zlecenia-doplata-rabat" id="wartosc4"/>
</li>
<li>
<label for="wartosc-zlecenia-brutto">KWOTA - BRUTTO - OBLICZA SIĘ SAMA</label>
<input type="text" readonly="readonly" name="wartosc-zlecenia-doplata-rabat" id="wartosc5"/>
</li>


oraz JS obsługujący powyższy formularz:


function oblicz(wartosc1, wartosc2, wartosc3, wartosc4, wartosc5)
{
var wartosc1 = document.getElementById(wartosc1).value;
var wartosc2 = document.getElementById(wartosc2).value;
var wartosc3 = document.getElementById(wartosc3).value;
/* OBLICZANIE KWOTY NETTO Z UWZGLĘDNIONĄ DOPŁATĄ I RABATEM */
var wyniknettodoplata = wartosc1 + (wartosc1*wartosc2)/100;
wyniknettodoplata = Math.round(wyniknettodoplata*100)/100;
var wyniknettodoplatarabat = wyniknettodoplata - (wyniknettodoplata * wartosc3)/100;
wyniknettodoplatarabat = Math.round(wyniknettodoplatarabat * 100)/100;

/* OBLICZANIE KWOTY BRUTTO */
var wynikbrutto = wyniknettodoplata + ((wyniknettodoplata * 23)/100);
wynikbrutto = Math.round(wynikbrutto*100)/100;


/* WRZUCANIE WYNIKÓW W POLA */
document.getElementById(wartosc4).value = wyniknettodoplatarabat;
document.getElementById(wartosc5).value = wynikbrutto;
};


Ogólnie machina rusza ale coś jest nie tak... procent oblicza ale dopłatę traktuje jak string a nie jak liczbę. ;/

PozdrawiamWaldemar Stańko edytował(a) ten post dnia 16.03.13 o godzinie 09:20
Adam Pawliczek

Adam Pawliczek Usability expert, UX
designer,
Interaction
specialist

Temat: Problem z funkcja przeliczania kwot dopłata/netto/brutto...

Waldemar Stańko:
dopłatę traktuje jak string a nie jak liczbę. ;/
I masz rację, w końcu to jest pole TEXT, a nie INTEGER czy FLOAT. Musisz zgłębić temat zmiennych w JS.

Temat: Problem z funkcja przeliczania kwot dopłata/netto/brutto...

zatrybiło z parseFloat() :]

konto usunięte

Temat: Problem z funkcja przeliczania kwot dopłata/netto/brutto...

Swoją drogą zainteresuj się operacjami na liczbach zmiennoprzecinkowych. Poszukaj sobie biblioteki BCMath dla JavaScript. Operuje ona nie na liczbach ale na stringach wykonując obliczenia dzięki czemu można wykonywać operacje o dowolnej precyzji (wolniej jak normalnie ale bezpieczniej) jednocześnie nie grzebiąc się ze wszystkimi niuansami związanymi z wykonywaniem takich obliczeń.

Temat: Problem z funkcja przeliczania kwot dopłata/netto/brutto...

Waldemar Stańko:
zatrybiło z parseFloat() :]
OT: Przy parsowaniu liczb, niezależnie od języka i platformy, zawsze lepiej wprost podawać podstawę, jeśli jest to możliwe.
Unikniesz dzięki temu pułapki typu:
parseInt("010") // = 8
parseInt("010", 10) // = 10


Konwencja wg. której 0 na początku oznacza system ósemkowy spotykana jest w wielu językach, warto być jej świadomym ;)

Następna dyskusja:

ie7 i problem z funkcja pod...




Wyślij zaproszenie do