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 * 2 je 6, ale 3 * 2.0 je 6.0.
  • / (dělení) dá vždycky desetinné číslo, i když dělení vyjde beze zbytku: 10 / 2 je 5.0.
  • // (celočíselné dělení) vydělí a výsledek zaokrouhlí dolů na celé číslo: 7 // 2 je 3. Říká, kolikrát se jedno číslo vejde do druhého.
  • % dá zbytek po dělení: 7 % 2 je 1, protože dvojka se do sedmičky vejde třikrát a 1 zbude.
  • ^ umocňuje a dá vždycky desetinné číslo: 2 ^ 3 je 8.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 / 7 dá 2.4285714285714. Použijte //.
  • Celočíselné dělení nulou: 7 // 0 zastaví program s chybou attempt to divide by zero (pokus o dělení nulou). 7 / 0 program 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é cena je jen 2. Čá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.

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: 6

Na další řádek vypište, kolik vajec zbude. Spočítejte to z proměnných pomocí %:

Krabičky: 6
Zbývá vajec: 2

Obchodní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.0

Nakonec 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	float

Začněte programovat zdarma

Registrací souhlasíte s provozními podmínkami a zásadami ochrany osobních údajů.

Nebo se registrujte pomocí:

3/10