Autor | Zpráva | ||
---|---|---|---|
Jan Žák Profil |
#1 · Zasláno: 27. 9. 2015, 23:19:04
Dobrý den všem,
rád bych požádal o pomoc. V databázi mám uloženou sazbu DPH 21% jako INT. Pomocí javascriptu níže počítám DPH zadáním ceny bez DPH do políčka. Script je funkční, ale když zadám 100, vypočítá 200. Když v DB zadám 1.21 opět je výpočet špatný. Pokud ale hodnotu 1.21 zadám přímo do scriptu (odstavím DB) výpočet je správný. Mohl by mě někdo poradit, co dělám špatně? Děkuji. $("#dph").on('change', function () { updatePrice(); }); $("#price").keyup(function () { updatePrice(); }); function updatePrice(){ novta = $("#price").val(); vta = $("#dph").val(); total = novta*vta; $("#price_VAT").val(total); } |
||
mimochodec Profil |
#2 · Zasláno: 27. 9. 2015, 23:24:04
Jan Žák:
Co je v těch proměnných novta a vta, když si je vypíšeš alertem? Jsi si jist, že cenu s DPH spočítáš tak, že základ daně vynásobíš sazbou daně? |
||
1Pupik1989 Profil |
Nevím, ale násobíš string stringem. To bude nejspíš problém. Přetypuj to na int nebo float
|
||
Radek9 Profil |
#4 · Zasláno: 28. 9. 2015, 00:02:34
Jan Žák:
Poprosím o živou ukázku, chyba asi bude jinde. Uvedený kód mi pro hodnoty 100 a 1.21 správně vypočítá 121. 1Pupik1989: „Nevím, ale násobíš string stringem. To bude nejspíš problém.“ To není problém, hodnoty se automaticky přetypují na číslo. |
||
Jan Žák Profil |
Radek9:
Tak jsem se dostal zase o kousek dál, jen jsem se zasekl na výpočtu celkové ceny. Když zadám třeba cenu 100 bez DPH, při výpočtu se mi zobrazí 10021, jako kdyby se neprovedl finální součet. Zde je odkaz na Fiddle jsfiddle.net/janzak/25ysdrmd/2 Vzorec pro výpočet mám takový: Výpočet koeficientu: 21 / 100 = 0,21 Výpočet DPH: 8 115,80 × 0,21 = 1 704,32 Kč Výpočet celkové částky s DPH: 8 115, 80 + 1 704,32 = 9 820,12 Kč |
||
lionel messi Profil |
Jan Žák:
„Když zadám třeba cenu 100 bez DPH, při výpočtu se mi zobrazí 10021, jako kdyby se neprovedl finální součet.“ Problém je v tomto: Diskuse JPW: Časté potíže, zajímavosti a poučné debaty » Součet čísel versus součet řetězců (operátor + totiž nielen sčíta, ale aj spája reťazce, stačí, že jeden z jeho „operandov“ je reťazec a výsledkom je reťazec, nie číslo (v príklade navyše z inputov vyjdú navyše reťazce hneď 2)).
|
||
Jan Žák Profil |
lionel messi:
Zkusil jsem to předělat, ale nedaří se mi, směl bych poprosit o ukázku? Poslední úprava, ale výsledek je stále stejný jako v minulém případě: function updatePrice(){ cenabezdph = $("#price").val(); dph = $("#dph").val(); total = cenabezdph + (dph*(cenabezdph/100)); $("#price_VAT").val(total); } |
||
Alphard Profil |
#8 · Zasláno: 28. 9. 2015, 11:12:25
Tohle čarování s přetypováním se mi v javascriptu vůbec nelíbí. Kdybych psal nějaký model já, budu se snažit oddělit vrstvu provádějící výpočet (které předám data v požadované podobě) a vrstvu, která tato data získává.
Např. nějak takhle Živá ukázka, ve vašem kódu potom jsfiddle.net/25ysdrmd/4. |
||
Jan Žák Profil |
#9 · Zasláno: 28. 9. 2015, 11:27:12
Alphard:
Děkuji moc za příklad, zase jsem se naučil něco nového. Děkuji všem za váš čas. |
||
_es Profil |
#10 · Zasláno: 28. 9. 2015, 11:39:13
Jan Žák:
Ako ti bolo poradené v [#8], najprv si všetky textové vstupy, kde sa zadávajú čísla, preveď na čísla a pracuj s nimi ako s číslami. K poslednému kódu: ("1" + 2) ani (1 + "2") nie je 3 ale "12" , viď aj Diskuse JPW: Časté potíže, zajímavosti a poučné debaty » Součet čísel versus součet řetězců.
|
||
mimochodec Profil |
#11 · Zasláno: 28. 9. 2015, 13:06:58
Alphard:
Představil jsem si, kolik programátorů by přestalo žvýkat oběd, kdyby v OVM Babiš oznámil: "Snižujeme sazbu DPH na 19,5 procenta". |
||
Alphard_ Profil * |
#12 · Zasláno: 28. 9. 2015, 13:37:04
mimochodec [#11]:
Kvůli tomu parseInt? V té druhé ukázce na jsfiddle už mám parseFloat i pro daň, v tom prvním případě mi to uteklo. |
||
mimochodec Profil |
#13 · Zasláno: 28. 9. 2015, 13:49:23
Alphard:
Přesně tak. Jen jsem se chtěl trochu podělit o ten děs, který z toho na mě sedl :) |
||
Časová prodleva: 9 let
|
0