Autor Zpráva
W4C
Profil *
Potřebuji dosadit do javascriptové funkce vzorec X= (Y+20.5) * 3/8
Jedná se mi o správnost syntaxe při operaci přičítání čísla 20.5 k proměnné Y, protože s operátorem "+" mi to nefunguje správně. Výsledek je jiný než má být a nevím proč. Když zadám místo znaku "+" jiné operátory("-,*,/"), tak funkce funguje jak má, takže problém je jedině v tom +.Ale bohužel netuším, jak se ho zbavit.

při Y=15 to hodí výsledek 570 (správně má být výsledek 13.3125)

Příčina špatného výsledku:
místo přičtení čísla 20.5 k proměnné Y dojde k tomu, že se odstraní jeho desetinná část(.5) a jeho celá část(20) se pripoji vpravo k hodnotě proměnné Y (15). Tzn hodnota proměnné Y se změní z 15 na hodnotu 1520(má to být 35.5) a po vynásobení 3/8 vyjde 570, což je samozřejmě blbě.

Zápis:
if (neco=="Y")
X=(document.getElementById("Y").value +20.5)  *  3  /  8;


Kde je chyba a jak tu hodnotu tedy správným způsobem přičtu, když s + to nejde?
Chamurappi
Profil
Reaguji na W4Ce:
Sčítáš-li řetězec a číslo, je výsledkem řetězec. Zajímá-li tě víc těchto pravidel, viz Hádanka.
Vynásob document.getElementById("Y").value jedničkou.
_es
Profil
W4C:
Kde je chyba a jak tu hodnotu tedy správným způsobem přičtu

document.getElementById("Y").value je textový reťazec, nie číslo, preto dochádza k spájaniu reťazcov operátorom +.
Číslo 20.5 je predtým prevedené na reťazec "20.5".
A podobná, len opačná, konverzia nastáva pri operátore *.
Teda ti len treba ten reťazec previesť na číslo:
parseFloat(document.getElementById("Y").value)
W4C
Profil *
Chamurappi, _es:
Hoši, díky moc za řešení a za info, po vynásobení *1 -
X=(document.getElementById("Y").value *1 +20.5)  *  3  /  8;
už to jede jak má.
Informace tohoto typu se /velmi/ špatně hledají, hlavně v kombinací se znakem "+", který i Google ignoruje. Pravidla se budou určitě hodit
Javascript se učím se metodou pokus-omyl a úpravou již hotových scriptů, takže nastává čas se začít věnovat i teorii. :)
W4C
Profil *
Zápis
X=(parseFloat(document.getElementById("Y").value) +20.5)  *  3  /  8;
funguje samozřejmě taky.
_es
Profil
W4C:
x*1 v princípe pracuje rovnako ako Number(x). Alebo si mohol použiť aj fintu: x - -20.5.
parseFloat sa "viac snaží" z reťazca to číslo získať, ak je na konci ešte nejaký text a pod.
peta
Profil
W4C:
"Informace tohoto typu se /velmi/ špatně hledají"
Prikladu na pocitani v JS je plny inet, stacilo hledat treba kalkulacku a prozkoumat kod v cem se lisi tvuj. Ale je to bezny problem, o nic nejde.
W4C
Profil *
peta:
nj, ale najít takovou, ve které je kód psaný tímto způsobem mi přestalo po cca 30-tém neúspěšném pokusu a vrtání se v nepřehledných kódech bavit .:)

_es
Mohl,.teď to už vím :) Dalo by se to vlastně použít i ve tvaru
(Y -1 +21.5)
. Tohle jsem ale už myslím zkoušel a předtím mi to nefachčilo (teď to jede). Je možný, že to bylo tím, že podobných zápisů s "+" bylo ve stejné funkci víc (3) a i když byl třeba 3-tí zapsanej správně, tak neprošel přes první dva , který byly blbě zapsaný a na kterých se to asi seklo,čert ví.

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:

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

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