【Ruby】数値オブジェクトを徹底解説!

Ruby

数値オブジェクトとは

Rubyのオブジェクト中の一つで数値を取り扱えるオブジェクトのことです。

数値オブジェクトが所属するクラス
リンクをコピーしました

Rubyで使用する文字や数字などのデータはオブジェクトという形でデータ化されます。
そのオブジェクトの一つに数値オブジェクトというものがあります。
数値オブジェクトは下記のように整数と小数点がある浮動小数点数に分けられます。

Numeric -+--Integer(整数)
     |
     +--Float (浮動小数点数)

なおこのクラスにnewメソッドを使ってインスタンスを作成することはできません。

数値オブジェクトを定義してみよう
リンクをコピーしました

数値オブジェクトは文字列オブジェクトのように「"(ダブルクォテーション)」で囲う必要はありません。
そのまま数値を書くだけで定義できます。
逆に「"(ダブルクォテーション)」で囲ってしまうと文字列オブジェクトになってしまうので気をつけましょう。

ruby
1
2
3
4
5
6
7
8
9
10
age = 20
p age
20
=> 20

age = "20"
p age
"20"
=> "20"
# 上の場合は数字の20でなく「20」という文字として扱われる

演算子を使ってみよう
リンクをコピーしました

数値オブジェクトは文字通り数字なので計算することもできます。
そのときに使うのがRubyの演算子です。
私たちの世界で使う記号とは多少異るので確認しておきましょう。

記号 説明
+ 足し算
- 引き算
* かけ算
/ 割り算
% 余剰

最後の余剰は実際の生活の中では馴染みがないのでわかりづらいかもしれません。
これは〜を〜で割った時の余りを求めるときに使います。

ruby
1
2
3
4
5
6
7
p 8 % 3
2
=> 2

p 10 % 5
0
=> 0

このように演算子を使えばターミナルで簡単な計算を行うこともできます。

init

比較演算子を使ってみよう
リンクをコピーしました

数値オブジェクトは計算の他にも値同士を比較することもできます。
そのときに使うのが比較演算子です。

記号 説明
A == B AとBは等しい
A != B AとBは等しくない
A > B AはBより大きい
A < B AはBより小さい
A >= B AはB以上
A <= B AはB以下

この結果はtrueかfalseかで返ってきます。

比較演算子
等しい時は「=」と書きません。
プログラミングでの「=」は代入を意味するのでしたね。
ですので等しい時は「==」と記述します。

また文字列オブジェクト同様、計算は比較ができるのは数値オブジェクト同士になります。
文字列を計算しようとしても文字として認識されるためエラーが出ます。

エラーが出る
ではこのような時はどうした良いでしょう。

to_iメソッド
リンクをコピーしました

to_iメソッドは文字列オブジェクトを10進数の表現と見なして整数に変換するメソッドです。
小数点がある時は切り捨てされ整数になります。

to_iメソッド

数値オブジェクトが使えるメソッド
リンクをコピーしました

数値オブジェクトにはRubyであらかじめ用意されている便利なメソッドがあります。
何種類か紹介してみます。

to_sメソッド
リンクをコピーしました

数値オブジェクトだけが使えるメソッドです。
数値オブジェクトに対して使うと文字列オブジェクトに変換されます。

roundメソッド
リンクをコピーしました

小数点を含む数値オブジェクトはFloatクラスのインスタンスになります。
そのFloatクラスのインスタンスに対して使うと小数点以下を四捨五入して整数に変してくれるメソッドです。

ruby
1
2
3
4
5
6
7
num = 1.1
num.round
> 1

num = 1.8
num.round
=> 2

floorメソッド
リンクをコピーしました

floorメソッドは小数点以下を小さい方の整数へ変換するメソッドです。
こちらは小数点以下を切り捨てて整数を返します。

ruby
1
2
3
num = 1.8
num.floor
=> 1

ceilメソッド
リンクをコピーしました

ceilメソッドは小数点以下を大きい方の整数へ変換するメソッドです。

ruby
1
2
3
num = 1.1
num.ceil
=> 2

このように前もって定義されているので、非常に便利ですね!

まとめ

数値オブジェクトはRubyのオブジェクトの一つで数値を扱えるメソッドです。