Autor Zpráva
Jan Žák
Profil
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
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
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
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
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
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
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 *
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
Alphard:
Přesně tak. Jen jsem se chtěl trochu podělit o ten děs, který z toho na mě sedl :)

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: