© 2013 All rights reserved.
1

Seriál Ruby on Rails 6: Datové typy: BigNum, FixNum, Float

Práce s číselnými datovými typy. Celá čísla v podobě FixNum a BigNum a desetinná čísla typu Float.

BigNum, FixNum

První dva datové typy, na které se podrobněji podíváme, jsou typy určující celé číslo. Oba tyto datové typy jsou si podobné, rozdíl spočívá pouze v možnosti uchovávat různé velikosti čísel.

calculator

Datový typ FixNum slouží pro uchování malých čísel, kdežto BigNum můžeme použít pro uchování velkých čísel. O typování se nám stará sám interpret, takže jestli je číslo uloženo jako BigNum nebo FixNum my jako programátor řešit nemusíme. Interpret jazyka automaticky vybere vhodný datový typ celého čísla, pokud je číslo příliš velké, automaticky jej uloží jako BigNum.

Výhoda, že jsou pro celá čísla použity dva datové typy, spočívá především v datové náročnosti. Čísla uložená jako FixNum zabírají v paměti méně místa.

Pro usnadnění zápisu velkých celých čísel nám Ruby umožňuje jednu zajímavou věc. V definici celého čísla můžeme používat znak podtržítka pro oddělení řádů, nebo jenom tak, pro lepší orientaci v čísle. Tento znak je při překladu vypuštěn:

Pro práci s těmito dvěma datovými typy existují stejné možnosti a stejné funkce, některé základní funkce si můžeme uvést.

Funkce abs – fix.abs

Funkce se vztahuje k danému číslu a vrací jeho absolutní hodnotu, vše bude jistě patrné na příkladu:

Funkce size – fix.size

Funkce vrací počet bytů, které zabírá dané číslo v paměti počítače. Použití je opět velmi jednoduché:

Funkce zero? – fix.zero?

Určuje, zda daný výraz má nulovou hodnotu. K této funkci existuje i několik aliasů v jiných datových typech, ovšem pro celá čísla můžeme použít právě zero?:

Funkcí pro práci s celými čísly samozřejmě existuje více. Všechny jsou uvedeny v dokumentaci jazyka. Krom funkcí můžeme pro práci s celými čísly používat samozřejmě matematické operátory.

Float

Předchozí dva datové typy měly definovanou množinu pouze v celých číslech, abychom mohli s čísly pracovat důkladněji, potřebujeme datový typ pro práci s plovoucí desetinnou čárkou a právě to nám dovoluje datový typ Float.

Pro práci s tímto datovým typem můžeme použít stejné funkce, které nám umožňují datové typy FixNum a BigNum, plus některé funkce, které využijeme pouze při práci s desetinnými čísly.

Desetinná část se v Ruby odděluje od celé části znakem tečka, nikoli čárka, jak jste tomu možná navyklí.

Zaokrouhlování – round, ceil, floor

Velmi častou operací s desetinnými čísly je operace zaokrouhlování. V ruby máme kromě klasického zaokrouhlování možností opět více.

Nejprve se podívejme na klasické zaokrouhlení, jak jej známe z matematiky. Číslo je zaokrouhlováno směrem dolů nebo nahoru, podle zbytku po odečtení celé části od absolutní hodnoty této celé části. K tomuto účelu, pro logické zaokrouhlování, využijete funkce round:

Krom tohoto logického zaokrouhlování můžeme rozhodnou o zaokrouhlení čísla sami a zaokrouhlovat defaultně buď směrem dolů, nebo směrem nahoru. K tomuto účelu nám slouží funkce ceil (zaokrouhlí směrem nahoru) a floor (zaokrouhlí směrem dolů):

Zajímavé je, že pokud použijeme některou z těchto funkcí, není výsledkem typ Float ale typ FixNum, nebo BigNum. Ruby automaticky výsledek přetypuje, protože výsledek typu Float není nutný a FixNum nebo BigNum je dostatečně přesný pro výsledek operace.

Závěrem

Práce s číselnými typy je vcelku jednoduchá, příště se podíváme na práci s řetězci, které v sobě skrývají více možností.

Comments (1)

Jen upozornim, ze v poslednim prikladu:
puts 0.001.floor #zaokrouhli smerem dolu, vypise 1

se vypise 0, nikoliv 1.

Add comment

About
Hi, i am programmer from the Czech Republic. I love web development (Ruby, Ruby on Rails, PHP, Nette) and iOS development (Objective-C, Cocoa).
To cooperate, here is my phone:
+420 608 836