Autor | Zpráva | ||
---|---|---|---|
xlifer Profil |
Jak udělat v javascriptu součet čísel?
Např. 5+2 = 7 Udělá se mi z toho "52", tzn. jen se to spojí jako řetězec... Zkoušel jsem eval(5+2), to funguje, ale problém je ještě v tom, že chci v cyklu navyšovat o různé hodnoty: vysledek = 0; vysledek += 5; vysledek += 2; Správně by měl být vysledek=7, ale udělá to zase "052" Tady nevím jak použít ten eval do toho a zda to vůbec lze? |
||
Zechy Profil |
#2 · Zasláno: 4. 6. 2014, 01:54:48
Bohužel na to, abych si to ověřil je Chrome už moc chytrý. Ale můžeš ta jednotlivá čísla prohnat přes parseInt(); před součtem.
|
||
Bubák Profil |
#3 · Zasláno: 4. 6. 2014, 01:59:57
xlifer:
„Jak udělat v javascriptu součet čísel?“ Já bych začal přečtením Časté potíže, zajímavosti a poučné debaty » Součet čísel versus součet řetězců. |
||
xlifer Profil |
Bubák:
Děkuji moc.... Použil jsem "Number" a pomohlo, ale učitě je alternativa i jak píše Zechy, akorat parseInt pracuje asi moc chytře, takže může způsobit i případné nepřesné součty... takže raději asi přes Number to vypadá jistější: vysledek = 0; vysledek += Number(5); vysledek += Number(2); |
||
_es Profil |
#5 · Zasláno: 4. 6. 2014, 05:48:18
xlifer:
Nejako píšeš nezmysly. Buď do premennej vysledek nepriraďuješ číslo 0 , ale textový reťazec "0" , alebo k premennej vysledek nepripočítavaš čísla, ale textové reťazce. Sčítaním dvoch čísel textový reťazec naozaj nevznikne: jsfiddle.net/3xna9
|
||
juriad Profil |
#6 · Zasláno: 4. 6. 2014, 08:22:06
V JS jsou tři operátory plus:
- unární aritmetický, který pro čísla nedělá nic a řetězec převede na číslo, tedy +5 // číslo 5 +"15" // číslo 15 5 + 15 // číslo 20 5 + "15" // řetězec "515" "5" + 15 // řetězec "515" "5" + "15" // řetězec "515" Operátory plus rovná se jsou dva: - binární aritmetický - pokud je levý argument proměnná obsahující číslo a pravý číslo, tedy: var x = 5; x += 15; // x je číslo 20 var x = 5; x += '15'; // x je řetězec "515" var x = '5'; x += 15; // x je řetězec "515" var x = '5'; x += '15'; // x je řetězec "515" Tedy, tvůj výpočet se neprovádí operátorem binárním aritmetickým, jak bys chtěl, ale z nějakého důvodu operátorem binárním řetězcovým. Důvod může být jediný: to, o čem jsi přesvědčený, že je číslo, číslo není. |
||
Zechy Profil |
#7 · Zasláno: 4. 6. 2014, 11:16:37
juriad:
Todle většinou zapříčinuje to, že právě v jeho případě je číslo nahráváno z "alertu". Pamatuju, že todle jsme zkoušeli na webovkách ve druháku a tam jsme právě museli číslo ošetřit parseInt(). |
||
Chamurappi Profil |
#8 · Zasláno: 4. 6. 2014, 11:31:36
Reaguji na Zechyho:
„Bohužel na to, abych si to ověřil je Chrome už moc chytrý.“ Cože? Nechápu. „je číslo nahráváno z "alertu"“ Spíš z <input> u.
Reaguji na xlifera: „akorat parseInt pracuje asi moc chytře, takže může způsobit i případné nepřesné součty“ Tohle také nechápu. Metoda parseInt přijímá řetězec (co jím není, na řetězec se převede) a vrací celé číslo.
„vysledek += Number(5);“ V tomto případě je Number zbytečné, 5 už je číslo.
Reaguji na juriada: „unární aritmetický, který pro čísla nedělá nic a řetězec převede na číslo“ Jen podotknu, že se provádí přesně stejný převod, jako při použití Number . A vstupem může být cokoliv, nejen číslo či řetězec.
„pokud alespoň jeden argument není číslo - převede argumenty na řetězce“ Ta podmínka je stavěná naopak — pokud alespoň jeden argument je řetězec. Třeba 5 + true vrací 6 , ne "5true" .
|
||
Zechy Profil |
Chamurappi:
„Spíš z <input>u.“ Jo, splet jsem si to s minulým problémem, kde to nahrávala z toho vyskakovacího okénka. „Cože? Nechápu.“ Co jsem zkoušel si to nějak odsimulovat, tak v žádném případě mi to chrome nesebral jako string, ale okamžitě to bral jako číslo. Možná jsem šel na to špatně. |
||
Joker Profil |
#10 · Zasláno: 4. 6. 2014, 13:10:28
Zechy:
„v žádném případě mi to chrome nesebral jako string, ale okamžitě to bral jako číslo“ Řetězce se v JS zapisují do uvozovek. var a = 5 + 2; // 7 var b = "5" + "2"; // 52 Chamurappi: „Tohle také nechápu.“ Možná ho mate, že parseInt umí různé číselné soustavy a podobně? |
||
Zechy Profil |
#11 · Zasláno: 4. 6. 2014, 13:19:00
Joker:
Nezkoušel jsem si definovat proměnné, ale přímo vstup z vyskakovacího okna. |
||
Chamurappi Profil |
#12 · Zasláno: 4. 6. 2014, 14:33:25
Reaguji na Zechyho:
„v žádném případě mi to chrome nesebral jako string“ Tvá odpověď naznačovala, že se chování může lišit v závislosti na prohlížeči, což je nebezpečný omyl. Nikdy žádný prohlížeč nesčítal skutečná čísla jako řetězce. V práci s datovými typy panuje už od dávných časů dokonalá souhra. „ale přímo vstup z vyskakovacího okna“ Tím myslíš prompt ? Ten vrací vždy řetězec, takže bys nikdy neměl narazit na aritmetické sčítání.
|
||
Časová prodleva: 10 let
|
0