Celá a desetinná čísla

Ve 2. lekci jste viděli, že 25 / 2 dá 12, a ne 12,5. Tenhle háček překvapí skoro každého, a tak se podívejme, proč se to děje a co s tím. Nepotřebujete k tomu ani tabulku: SELECT bez FROM prostě spočítá, co mu napíšete, takže ho můžete používat jako kalkulačku:

SELECT 7 / 2;
7 / 2
3

Ne 3,5, ale 3. SQLite má dva druhy čísel: celá čísla (typ INTEGER), třeba 7 nebo 999, a desetinná čísla (typ REAL), třeba 3.5 nebo 999.0. Když jsou obě čísla v dělení celá, je celé i výsledek a to, co by bylo za desetinnou čárkou, se prostě zahodí. Nic se nezaokrouhluje nahoru: 7 / 2 je 3, 9 / 10 je 0 a -7 / 2 je -3. (Matematik by řekl, že se zaokrouhluje směrem k nule.)

Jakmile je aspoň jedno z obou čísel desetinné, je desetinný i výsledek. Když tedy potřebujete přesný výsledek, napište jedno z čísel s .0:

SELECT 7 / 2.0, 7.0 / 2;
7 / 2.07.0 / 2
3.53.5

Desetinná čísla se v SQL píšou s tečkou, ne s čárkou, a s tečkou je SQLite také vypisuje. Zápis 3,5 by SQL přečetlo jako dvě čísla, 3 a 5.

V obchodě Pixel Shop na tom záleží, protože ceny jsou celá čísla (sloupec cena je INTEGER). Tady je polovina každé ceny, jednou dělená 2, podruhé 2.0:

SELECT nazev, cena, cena / 2 AS polovina_cela, cena / 2.0 AS polovina
FROM hry
LIMIT 3;
nazevcenapolovina_celapolovina
Dragon Forge999499499.5
Pixel Racer399199199.5
Moon Farm499249249.5

Polovina z 999 Kč je 499,50 Kč, ale cena / 2 tvrdí, že 499. Všimněte si také, jak SQLite desetinná čísla vypisuje: desetinné číslo, které vyjde celé, píše s .0 na konci, třeba 500.0, aby bylo poznat, že je desetinné. Dlouhé výsledky ukazuje nejvýš na 15 číslic: 10 / 3.0 je 3.33333333333333. Jak je zaokrouhlit, se naučíte v dalším cvičení.

Jiná možnost je číslo nejdřív vynásobit 1.0: cena * 1.0 / 2. Násobení 1.0 hodnotu nezmění, jen z ní udělá desetinné číslo. Hodí se, když jsou obě čísla v dělení sloupce a není k čemu .0 připsat. Musí ale přijít jako první: v cena / 2 * 1.0 už dělení polovinu zahodilo a vyjde 499.0.

Operátor % dává zbytek po celočíselném dělení, tedy to, co zbude. 135 minut jsou 2 hodiny a 15 minut:

SELECT 135 / 60 AS hodiny, 135 % 60 AS minuty;
hodinyminuty
215

Celočíselné dělení tedy není chyba, jen jiný druh dělení, a někdy je přesně tím, co potřebujete: hodiny a minuty, plné krabice a kusy, které zbudou, nebo sudá a lichá čísla (id % 2 je 0 pro sudá ID a 1 pro lichá). % v SQL znamená zbytek, ne procenta.

Typická chyba: procenta s celými čísly. 15 % z ceny není cena / 100 * 15: u hry za 999 Kč je cena / 100 jen 9 a výsledek je 135 místo 149,85. Napište cena * 15 / 100.0 nebo prostě cena * 0.15.

Pokyny

Pixel Shop chce zákazníkům nabídnout placení ve 4 měsíčních splátkách. Ukažte název, cenu a cenu dělenou 4 jako splatka, i s desetinnou částí. Hry seřaďte podle ceny od nejvyšší, hry se stejnou cenou podle názvu:

nazevcenasplatka
Knight's Oath1599399.75
Goal Rush1299324.75
Ice Hockey Pro1199299.75
………

Pod něj přidejte dotaz pro dárkový poukaz obchodu na 2000 Kč: ukažte název, cenu, počet kusů hry, které se za poukaz dají koupit, jako kusu a počet korun, které na poukazu zbydou, jako zbyde. Hry seřaďte podle ceny od nejnižší, hry se stejnou cenou podle názvu:

nazevcenakusuzbyde
Cube Logic1291565
Word Quest24988
Bakery Story39955
…………

Začněte programovat zdarma

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

Nebo se registrujte pomocí:

1/10