Rubyの数字について - Rubyプログラミング(11)

プログラミング、サーバー、ネットワーク、IT用語、ハマったときのトラブルシューティングなど様々なIT関連の話題をひたすら書いていく技術ブログです。

2017年1月29日日曜日

Rubyの数字について - Rubyプログラミング(11)


Rubyの足し算、引き算、掛け算、割り算

ここからはRubyの数字の計算について見ていきます。足し算は以下のようになります。
足し算は「+」、引き算は「-」、掛け算は「*」、割り算は「/」を使用します。

p 5 + 5

同じように引き算、掛け算、割り算も+のところが変わるだけです。指数を表したときは「**」を使用します。

p 5**5

上記は「p 5*5*5*5*5」と同じです。

Rubyでの計算の順序

計算の演算子(+や*など)を使う時に演算子が処理される順序を理解することが重要です。

( )
**
*
/
+
-

上から優先的に処理されていきます。例えば全ての演算子を使用して式を実行する場合の例

p 5 + 15 * 20 - 2 / 6 ** 3 - (3 + 1)

上記の式を計算すると301になると思います。コンパイラ(人間が理解しやすい言語や数式で記述されたプログラムを、機械語に変換するプログラムのこと。私たちが書いたプログラムの実行に必要)はまず()を探します。上記の式では(3 + 1)の部分です。その計算は4になります。次に指数(**)を扱うので、6**3の部分です。216です。次に掛け算です。20 * 15で300になります。次に割り算で2 / 216は0になります(厳密には0ではないですが、その件について後程紹介します)。次は足し算です。5 + 300 = 305。最後に引き算です。3005 - 4 = 301です。計算式の変化は以下のようになります。

ステップ1
5 + 15 * 20 - 2 / 6 ** 3 - 4

ステップ2
5 + 15 * 20 - 2 / 216 - 4

ステップ3
5 + 300 - 2 / 216 - 4

ステップ4
5 + 300 - 0 - 4

ステップ5
305 - 0 - 4

ステップ6
301

またこの他にも「>」「<」「&&」「||」「==」などプログラムで理解すべき演算子がいくつかあります。これらは今後説明します。




RubyのIntegerとfloatの違い

Rubyでは数字に関していくつか違ったデータ型が存在します。もっとも重要なのはinteger型(整数型)とfloat型(浮動小数点型)です。その違いを説明します。今までの例で割り算の計算が少し奇妙だったと感じる人もいると思います。上記の「2/216」が0として扱われた例です。これは私たち人間からしたら明らかに間違えですが、なぜRubyは0を返すでしょうか?

それは、「2」と「216」がintegerとして扱われるからです。integerとintegerの計算の場合、Rubyは数字の小数点以下を切り捨てて整数に丸めます。2 / 216は0.009259...となり、小数点以下を切り捨てるので、結果0になります。

正確な数字を返すために、integerを10進数(decimal)にする必要があります。そうするとfloat型で返されます。

p 2.0 / 216

上記を実行すると0.009259...となります。これはRubyプログラミングの中のinteger型とfloat型の違いです。実際のアプリケーションでは、おそらくfloatを使用して正確な数字をデータベースなどに保存することが多いでしょう。逆にinteger型は正確には数字が取れませんのであまり使用することはないでしょう。

integer型ももちろん使い道はあります。例えば商品IDや社員IDなど何かのIDなどです。一点注意したいことは、そのIDは計算に使われないことです。一般的に、Rubyでは3つの数字データ型があります。

integer型
float型
decimal型

float型とdecimal型の違いは計算はfloat型の方が早いですが、decimalはより正確な数値を返します(扱える小数点以下の桁数が多いからです)。そしてdecimal型の方がデータベースの容量は少し多めに使用します。decimal型は複雑なファイナンスの計算などにはピッタリなデータ型です。プログラムを書いていると色々なデータ型が頻繁に出てきますので、しっかり違いを理解して適切に使いましょう。

◯Hello Worldの文字列を表示する - Rubyプログラミング(12)はこちら
◯「Rubyプログラミング」シリーズの一覧はこちら



最近の投稿