Diskuze: Převod string na number

JavaScript JavaScript Převod string na number

Avatar
jakubho
Člen
Avatar
jakubho:

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. května 21:56
Chyba-Jediná jistota v životě programátora.
Avatar
Filip Šohajek
Redaktor
Avatar
Odpovídá na jakubho
Filip Šohajek:

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  +1 29. května 22:01
Avatar
Taskkill
Redaktor
Avatar
Odpovídá na jakubho
Taskkill:

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. května 22:05
Avatar
jakubho
Člen
Avatar
Odpovídá na Taskkill
jakubho:

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. května 22:15
Chyba-Jediná jistota v životě programátora.
Avatar
Filip Šohajek
Redaktor
Avatar
Odpovídá na jakubho
Filip Šohajek:

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. května 22:18
Avatar
jakubho
Člen
Avatar
jakubho:

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. května 22:36
Chyba-Jediná jistota v životě programátora.
Avatar
Taskkill
Redaktor
Avatar
Odpovídá na jakubho
Taskkill:

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í
+1 bodů
Řešení problému
 
Nahoru Odpovědět 29. května 22:43
Avatar
jakubho
Člen
Avatar
Odpovídá na Taskkill
jakubho:

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

Nahoru Odpovědět 29. května 22:47
Chyba-Jediná jistota v životě programátora.
Avatar
Filip Šohajek
Redaktor
Avatar
Odpovídá na jakubho
Filip Šohajek:

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  +1 29. května 22:47
Avatar
jakubho
Člen
Avatar
Odpovídá na Filip Šohajek
jakubho:

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. května 22:50
Chyba-Jediná jistota v životě programátora.
Avatar
Taskkill
Redaktor
Avatar
Odpovídá na Taskkill
Taskkill:

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. května 22:55
Avatar
Taskkill
Redaktor
Avatar
Odpovídá na Filip Šohajek
Taskkill:

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. května 23:01
Avatar
1Pupik1989
Člen
Avatar
1Pupik1989:

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  +1 30. května 17:01
Avatar
Odpovídá na 1Pupik1989
Libor Šimo (libcosenior):

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

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

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

 
Nahoru Odpovědět 31. května 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.