Celá a desetinná čísla
V první lekci jste viděli, že 10 / 2 vypíše 5.0, a ne 5. Teď se dozvíte proč. Lua má dva druhy čísel:
- Celá čísla, kterým programátoři říkají integer:
120,0,-3. Eminy mince, vejce i dny jsou celá čísla. - Desetinná čísla, kterým programátoři říkají float (z anglického floating point, plovoucí desetinná čárka, podle toho, jak je počítač ukládá):
2.5,0.75,-1.5. Píšou se s desetinnou tečkou, ne s čárkou, na kterou jste zvyklí z češtiny.
Desetinné číslo Lua vypíše vždycky s tečkou, i když je celé: 5.0 je float, 5 integer. Hodnota je stejná, ale Lua si pamatuje, jakého druhu je každé číslo. Prozradí vám to funkce math.type:
print(math.type(5))
print(math.type(5.0))
print(math.type(2.5))Vypíše:
integer
float
float(math je sbírka matematických funkcí jazyka Lua. Další z nich použijete v příštím cvičení.)
Jestli bude výsledek celé, nebo desetinné číslo, záleží na operátoru:
+,-a*dají celé číslo, když jsou celá obě čísla. Když je jedno z nich desetinné, je desetinný i výsledek:3 * 2je6, ale3 * 2.0je6.0./(dělení) dá vždycky desetinné číslo, i když dělení vyjde beze zbytku:10 / 2je5.0.//(celočíselné dělení) vydělí a výsledek zaokrouhlí dolů na celé číslo:7 // 2je3. Říká, kolikrát se jedno číslo vejde do druhého.%dá zbytek po dělení:7 % 2je1, protože dvojka se do sedmičky vejde třikrát a 1 zbude.^umocňuje a dá vždycky desetinné číslo:2 ^ 3je8.0.
print(7 / 2)
print(7 // 2)
print(7 % 2)
print(10 / 2)
print(2 ^ 3)Vypíše:
3.5
3
1
5.0
8.0// a % spolu dobře fungují. Jahody dozrají za 17 dní: 17 // 7 jsou 2 celé týdny a 17 % 7 jsou 3 dny navíc. Podle zbytku také poznáte sudá čísla od lichých: sudé číslo má po dělení dvěma zbytek 0, liché 1.
Typické chyby:
/tam, kde chcete celé číslo:17 / 7dá2.4285714285714. Použijte//.- Celočíselné dělení nulou:
7 // 0zastaví program s chybouattempt to divide by zero(pokus o dělení nulou).7 / 0program nezastaví, ale dáinf, nekonečno, a to vám taky moc nepomůže. - Desetinná čárka:
local cena = 2,5žádnou chybu neohlásí, ale v proměnnécenaje jen2. Čárka v Lua odděluje dvě hodnoty. Proměnná dostane první z nich a pětka se ztratí.
Ještě jedna věc: počítač ukládá desetinná čísla ve dvojkové soustavě, a proto mnohá z nich nejsou přesná. 0.1 + 0.2 vypíše 0.3, ale výsledek je ve skutečnosti o maličko větší. I proto se peníze nejlépe počítají v celých číslech, jako to dělá Ema se svými mincemi.
Jak psát:
Pokyny
Spusťte program. Vypíše Krabičky: 6.3333333333333, jenže třetinu krabičky Ema neprodá. Změňte dělení tak, aby program vypsal jen počet plných krabiček:
Krabičky: 6Na další řádek vypište, kolik vajec zbude. Spočítejte to z proměnných pomocí %:
Krabičky: 6
Zbývá vajec: 2Obchodník Hugo platí za plnou krabičku 12 mincí. Pod to vytvořte proměnnou cenaKrabicky s hodnotou 12 a vypište, kolik Ema dostane za jedno vejce: cenaKrabicky vydělenou doKrabicky pomocí /. Dělení vyjde beze zbytku, ale / dá vždycky desetinné číslo, a tak Lua vypíše 2.0:
Krabičky: 6
Zbývá vajec: 2
Mincí za vejce: 2.0Nakonec ověřte, jakého druhu jsou oba výsledky. Jedním print vypište math.type(vejce // doKrabicky) a math.type(cenaKrabicky / doKrabicky), oddělené čárkou:
Krabičky: 6
Zbývá vajec: 2
Mincí za vejce: 2.0
integer floatZačněte programovat zdarma
3/10