Převody hodnot
Číslo se může schovávat i v textu: "12" v uvozovkách není číslo 12, ale text ze znaků 1 a 2. Programy dostávají čísla jako text pořád: co někdo napsal na klávesnici, řádek ze souboru, cenu z cedulky. A print vypíše obojí stejně, takže je od sebe pohledem nerozeznáte:
local vejce = 12
local poznamka = "12"
print(vejce, poznamka)
print(type(vejce), type(poznamka))Vypíše:
12 12
number stringFunkce tonumber převede text na číslo. Když text číslo není, vrátí nil:
print(tonumber("12"))
print(tonumber("2.5"))
print(tonumber(" 7 "))
print(tonumber("12 vajec"))
print(tonumber("2,5"))Vypíše:
12
2.5
7
nil
nilMezery kolem čísla nevadí, ale cokoli jiného v textu ano, i desetinná čárka. Výsledek může být nil, a tak je dobré ho zkontrolovat; jak, to se naučíte v lekci o podmínkách.
Funkce tostring funguje opačně: převede jakoukoli hodnotu na text. Potřebujete ji, když chcete pomocí .. připojit k textu pravdivostní hodnotu nebo nil:
local stodolaOtevrena = true
print("Stodola otevřená: " .. tostring(stodolaOtevrena))
print("Dýně: " .. tostring(nil))Vypíše:
Stodola otevřená: true
Dýně: nilČísla ji nepotřebují: .. je na text převede samo, jako v "Mince: " .. 120.
Lua umí převést text na číslo i sama, když s ním počítáte:
print("10" + 5)
print("10" * "2")
print("10" .. 5)Vypíše:
15
20
105Poslední řádek nepočítá: .. vždycky spojuje, takže z "10" a 5 vznikne text 105. Na tyhle převody se nespoléhejte. Takový program funguje, jen dokud v textu opravdu je číslo: "deset" + 5 skončí chybou attempt to add a 'string' with a 'number'. A porovnávání, které se naučíte v příští lekci, nepřevádí vůbec. S tonumber je z kódu jasně vidět, že k převodu dochází, a místo chyby dostanete nil, které můžete zkontrolovat.
Jak psát:
Pokyny
Převeďte prodaneMrkve a cenaMrkve na čísla pomocí tonumber, vynásobte je a vypište, kolik Ema za mrkve utržila:
Mrkve: 60 mincíNa další řádek vypište, jestli Ema všechno prodala. Hodnotu vyprodano připojte k textu pomocí ..; je to pravdivostní hodnota, takže budete potřebovat tostring:
Mrkve: 60 mincí
Vyprodáno: trueU dýní si Ema poznamenala „asi 3“, a to není číslo. Vypište, co z prodaneDyne udělá tonumber, za text "Dýně:" a čárku:
Mrkve: 60 mincí
Vyprodáno: true
Dýně: nilZačněte programovat zdarma
8/10