Zaokrouhlování

V předchozím cvičení vyšlo 10 / 3.0 jako 3.33333333333333. Nikdo nechce platit splátku 333,333333333333 Kč, takže ceny je potřeba zaokrouhlit. K tomu má SQL funkci.

Funkce je malý hotový program: dáte jí hodnoty a ona vrátí výsledek. Napíšete její název a za něj do závorek hodnoty, se kterými má pracovat, takzvané argumenty, oddělené čárkami. V ROUND(10 / 3.0, 2) dostane funkce ROUND (zaokrouhli) dva argumenty, 10 / 3.0 a 2, a vrátí 3.33. SQLite má desítky funkcí a v této lekci se naučíte ty nejužitečnější. Na velikosti písmen v jejich názvech nezáleží (funguje i round) a tento kurz většinu z nich píše velkými písmeny, stejně jako klíčová slova.

ROUND(x, mista) zaokrouhlí číslo x na daný počet desetinných míst. S jedním argumentem, ROUND(x), zaokrouhlí na celé číslo. Polovina se zaokrouhluje nahoru, směrem od nuly: z 2.5 je 3.0 a z -2.5 je -3.0.

SELECT ROUND(3.14159, 2) AS pi, ROUND(2.5) AS polovina, ROUND(12.5, 2) AS halere;
pipolovinahalere
3.143.012.5

Všimněte si dvou věcí. ROUND vrací vždycky desetinné číslo, i když zaokrouhluje na celé: 3.0, ne 3. A na konec nepřidává nuly: 12.5 zaokrouhlené na dvě místa zůstane 12.5, ne 12.50.

Funkci můžete použít všude, kde může být hodnota: v SELECT vedle sloupců nebo ve výpočtu. Jejími argumenty mohou být i sloupce a celé výpočty. Ceny v obchodě jsou včetně 21% DPH; tady jsou ceny bez DPH, zaokrouhlené na haléře:

SELECT nazev, cena, ROUND(cena / 1.21, 2) AS bez_dph
FROM hry
LIMIT 3;
nazevcenabez_dph
Dragon Forge999825.62
Pixel Racer399329.75
Moon Farm499412.4

SQLite postupuje zevnitř ven: nejdřív vydělí cenu číslem 1.21, pak výsledek zaokrouhlí. Jako každý výpočet pojmenujte výsledek pomocí AS; jinak se sloupec jmenuje celým voláním funkce, ROUND(cena / 1.21, 2).

Další funkcí pro čísla je ABS(x), absolutní hodnota: číslo bez znaménka minus. ABS(-5) i ABS(5) je 5. Hodí se, když záleží jen na velikosti rozdílu, třeba jak daleko je cena hry od 800 Kč, ať nahoru, nebo dolů: ABS(cena - 800).

Typická chyba: zaokrouhlování výsledku celočíselného dělení. ROUND(cena / 3, 2) dá u hry za 1199 Kč 399.0, a ne 399.67, protože 1199 / 3 je 399 ještě dřív, než to ROUND vůbec dostane. Co dělení zahodilo, to zaokrouhlení nevrátí, a tak dělte číslem 3.0.

Pokyny

Blíží se Black Friday se slevou 15 % na všechny hry. Ukažte název, cenu a cenu ve slevě jako cena_ve_sleve: cenu krát 0.85, zaokrouhlenou na celé koruny. Hry seřaďte podle názvu:

nazevcenacena_ve_sleve
Bakery Story399339.0
Castle Siege799679.0
Cube Logic129110.0
Dragon Forge999849.0
………

Pod něj přidejte znovu splátky, tentokrát tři: ukažte název, cenu a cenu dělenou 3, zaokrouhlenou na haléře (dvě desetinná místa), jako splatka. Hry seřaďte podle ceny od nejvyšší, hry se stejnou cenou podle názvu:

nazevcenasplatka
Knight's Oath1599533.0
Goal Rush1299433.0
Ice Hockey Pro1199399.67
………

Začněte programovat zdarma

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

Nebo se registrujte pomocí:

2/10