NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
jakubho
Člen
Avatar
jakubho:29.5.2016 21:56

Ahoj. Mám takový malý problém, či spíše neznalost... Začal jsem se učit základy JS na Sololearn. To proto, že jejich appka narozdíl od tohoto webu funguje offline, což jsem potřeboval. Nicméně, rozhodl jsem se, že chci zužitkovat nabité vědomosti... Uznávám, že appka jen přes vyskakovací okna je asi k ničemu, ale aktuálně to je jediný vstup od uživatele, který ovládám...

var PrvniCislo = prompt ("Zadej první číslo");
var DruheCislo = prompt ("Zadej druhé číslo");
var vysledek = PrvniCislo + DruheCislo;
alert ("Součet je " + vysledek + ".");

Problém je, že pokud zadám dvě čísla (třeba 5 a 3) výsledek by měl být jejich součet (8), ale ve skutečnosti se chovají jako text (vypíše se 53). Nějaký čas jsem se učil základy Javy, takže je mi jasné, že musím číslo tzv. naparsovat. Bohužel nevím jak... Mohl by mi někdo poradit, jak na to?

Offtopic: Vtipný je, že operace jako odčítání, dělení a násobení by tam fungovaly a dokonce to ani nehází warning :D

Odpovědět
29.5.2016 21:56
Chyba-Jediná jistota v životě programátora.
Avatar
Odpovídá na jakubho
Neaktivní uživatel:29.5.2016 22:01

Musíš obě čísla převést funkcí parseInt:

var vysledek = parseInt(PrvniCislo, 10) + parseInt(DruheCislo, 10);

Ta 10 je soustava, je nepovinná, ale občas dokáže JS zmást formát čísla.

Nahoru Odpovědět
29.5.2016 22:01
Neaktivní uživatelský účet
Avatar
Odpovídá na jakubho
Neaktivní uživatel:29.5.2016 22:05

Použij konstruktor Number() ... do něj předej tu navrácenou hodnotu ... vrátí se ti číslo... ohledně toho odčítání... pokud odečteš "9" - "4" tak se provede konverze pomocí metody valueOf() to samé násobení a dělení... není to tedy nic jiného než standardní chování dynamického jazyka ...

Nahoru Odpovědět
29.5.2016 22:05
Neaktivní uživatelský účet
Avatar
jakubho
Člen
Avatar
Odpovídá na Neaktivní uživatel
jakubho:29.5.2016 22:15

Taskill můžeš to prosím rozvést? Jak přesně mám použít konstruktor Number()? Mám udělat Number(PrvniCislo); a od té chvíle je v proměnné PrvniCislo hodnota typu number nebo jak to je?

Nahoru Odpovědět
29.5.2016 22:15
Chyba-Jediná jistota v životě programátora.
Avatar
Odpovídá na jakubho
Neaktivní uživatel:29.5.2016 22:18

Můžeš udělat buď Number(PrvniCislo), což ti vyhodí hodnotu primitivního typu number.
Pokud uděláš new Number(PrvniCislo), pak ti to vrátí wrapper na primitivní typ number.
Je úplně jedno, co použiješ, akorát ve druhém případě získáš objekt s nějakými pomocnými metodami s prací s tím číslem.

Nahoru Odpovědět
29.5.2016 22:18
Neaktivní uživatelský účet
Avatar
jakubho
Člen
Avatar
jakubho:29.5.2016 22:36

Fajn, mám to. Vyzkoušel jsem obě možnosti,první možnost pomocí Number() a možnost, kterou tu nastínil Filip ParseInt(). Fungují obě dvě, proč použít kterou? Je v tom nějaký rozdíl, když je použiju? Zatím to vypadá, že obě dělají to samé... Přijde mi ale nelogické, aby byly v JS dvě možnosti jak udělat jednu věc...

Nahoru Odpovědět
29.5.2016 22:36
Chyba-Jediná jistota v životě programátora.
Avatar
Odpovídá na jakubho
Neaktivní uživatel:29.5.2016 22:43

var cislo = Number(prvniCislo);

Od teď je v cislo, číslo a ne string. Hele můžeš použít parseInt() a můžeš použít Number() oboje má svoje plus a mínus... parseInt třeba má to chování že když parsujes string "123-$;" tak ti vrátí v pohodě číslo ... tu část kterou ten string začíná.. Number udělá objekt s něčím navíc, ale když mu dáš string s tímhle bordelem tak to neprojde ...

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
29.5.2016 22:43
Neaktivní uživatelský účet
Avatar
jakubho
Člen
Avatar
Odpovídá na Neaktivní uživatel
jakubho:29.5.2016 22:47

Tak jo, moc děkuju všem :-)

Nahoru Odpovědět
29.5.2016 22:47
Chyba-Jediná jistota v životě programátora.
Avatar
Odpovídá na jakubho
Neaktivní uživatel:29.5.2016 22:47

JS má spoustu nelogických zákoutí :)
Ještě bych dodal, že parseInt si třeba neporadí s vědeckou notací. takže když mu podstrčíš 1e8, tak ti vyhodí 1 a ne 100000000, což by udělal Number. Pokud by jsi chtěl dělat kalkulačku, tak se hodí spíš Number, protože parseInt se může někdy chovat neočekávaně.

Nahoru Odpovědět
29.5.2016 22:47
Neaktivní uživatelský účet
Avatar
jakubho
Člen
Avatar
Odpovídá na Neaktivní uživatel
jakubho:29.5.2016 22:50

1e8 nevím co je ani já, takže tohle mu laskavě odpouštím :D Ne, teď vážně, díky za radu. Asi si někdy zjistím o těchto dvou možnostech víc ať vím, kdy kterou použít a tak, to už si vygooglím :-)

Nahoru Odpovědět
29.5.2016 22:50
Chyba-Jediná jistota v životě programátora.
Avatar
Odpovídá na Neaktivní uživatel
Neaktivní uživatel:29.5.2016 22:55

Ještě dodám že Number udělá objekt pokud použiješ new Number() ...pokud zavoláš jen Number jak jsem to ukázal...tak se neudělá novej objekt pouze se proparsuje hodnota a proměnná je typu number ... pokud opět zadas string s bordelem tak to neprojde dobře ... respektive hodnota bude NaN

Nahoru Odpovědět
29.5.2016 22:55
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
Neaktivní uživatel:29.5.2016 23:01

Já bych neřekl že je nelogický.. protože ono to skoro všechno zapadá do pravidel toho jak je navržen... i tohle je naprosto logický, když víš jak to uvnitř funguje.

Věci co tam nedávají smysl tam ale taky jsou, jen nejsou podle mě tak snadno vidět.

Nahoru Odpovědět
29.5.2016 23:01
Neaktivní uživatelský účet
Avatar
1Pupik1989
Člen
Avatar
1Pupik1989:30.5.2016 17:01

Já to běžně dělám následovně:

var a = '3.8';
var b = '1e8';

var result = (+a)+(+b);

console.log(result); //100000003.8
 
Nahoru Odpovědět
30.5.2016 17:01
Avatar
Odpovídá na 1Pupik1989
Libor Šimo (libcosenior):31.5.2016 7:05

Takže to + vlastne nahradí Number(). Je to tak?

Nahoru Odpovědět
31.5.2016 7:05
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
1Pupik1989
Člen
Avatar
Odpovídá na Libor Šimo (libcosenior)
1Pupik1989:31.5.2016 9:30

Ano, tím se proměnná přetypuje na číslo.

 
Nahoru Odpovědět
31.5.2016 9:30
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 15 zpráv z 15.