組み込みクラス: 数値型クラス編

ceil 破壊的なし

大きいほうへ切り上げ(ただし、自身が整数ならそのまま)。型自体も変更されるので、破壊的なメソッドはない。「2.0」のようにはならない。

floor

小さいほうへ切り下げ(ただし、自身が整数ならそのまま)。型自体も変更されるので破壊的なメソッドはない。「2.0」のようにはならない。

irb(main):020:0> a = 3.14
=> 3.14
irb(main):021:0> a.class
=> Float
irb(main):024:0> p a.class
Float
=> Float
irb(main):025:0> p a
3.14
=> 3.14
irb(main):026:0> a.ceil!
Traceback (most recent call last):
        2: from /home/pyons/.rbenv/versions/2.5.0/bin/irb:11:in `<main>'
        1: from (irb):26
NoMethodError (undefined method `ceil!' for 3.14:Float
Did you mean?  ceil)

round

最も近い整数を返し、2つあるなら0から遠いほうを返す。

irb(main):027:0> a = 2.5
=> 2.5
irb(main):028:0> a.round
=> 3

truncate

それ自身と0の間にある整数で最も近いものを返す。floorと同じに見えて、負の数の動きが違う。

irb(main):029:0> a = 2.5
=> 2.5
irb(main):030:0> a.truncate
=> 2
irb(main):036:0> a = - 2.5
=> -2.5
irb(main):037:0> a.floor
=> -3
irb(main):038:0> a.truncate
=> -2

abs

絶対値

step

引数の1つ目にターゲットを、2つ目に一回のインクリメント量を指定する。引数の2つ目は省略して、1ずつのインクリメントが行える。

irb(main):002:0> 1.step(5){|i| p i }
1
2
3
4
5
=> 1
irb(main):003:0> 1.step(5,0.5){|i| p i }
1.0
1.5
2.0
2.5
3.0
3.5
4.0
4.5
5.0
=> 1

stepは原則上向きのインクリメントにしか対応していないので、「1」というオブジェクトに対して-100へのstepを行うと繰り返しが行われない。

irb(main):004:0> 1.step(-10){|i| p i }
=> 1
irb(main):006:0> 1.downto(-5){|i| p i }
1
0
-1
-2
-3
-4
-5
=> 1

代わりにdown_toが使えるが、一回のインクリメントを指定できず、必ず1ずつとなる。これとセットとなるメソッドとしてuptoがある。

irb(main):007:0> 1.downto(-5,0.5){|i| p i }
Traceback (most recent call last):
        3: from /home/pyons/.rbenv/versions/2.5.0/bin/irb:11:in `<main>'
        2: from (irb):7
        1: from (irb):7:in `downto'
ArgumentError (wrong number of arguments (given 2, expected 1))

**と/

べき乗は**。掛け算の演算子より優先順位が高い。これは、離して書いても同じである。

irb(main):009:0> 2 ** 3*100
=> 800
irb(main):011:0> 100*2 ** 3
=> 800

べき乗記号が離して書いてあるので、先にくっつけて書いてある、3*100の処理が行われそうだが、そんなことはなく、べき乗から行われている。

除算じゃ整数同士であれば、あまりを無視して整数に、どちらかが小数であれば、小数が返る。

irb(main):012:0> 1 / 3
=> 0
irb(main):013:0> 1 / 3.0
=> 0.3333333333333333

nextとpred

+1と-1。小数ではundefinedとなる。 nextのエイリアスとしてsuccがある。

irb(main):015:0> 2.0.next
Traceback (most recent call last):
        2: from /home/pyons/.rbenv/versions/2.5.0/bin/irb:11:in `<main>'
        1: from (irb):15
NoMethodError (undefined method `next' for 2.0:Float)
irb(main):016:0> 2.next
=> 3

times

その整数の数だけ、繰り返し。

modulo

剰余%エイリアス

irb(main):017:0> 3.modulo(2)
=> 1
irb(main):018:0> 3.5.modulo(2)
=> 1.5
irb(main):019:0> 3.0.modulo(2)
=> 1.0

小数ででるか整数で出るかのルールは除算と同じ。

ビット演算

省略

to_f

整数の小数化。小数自体にこのメソッドを行ってもエラーは発生しない。

irb(main):020:0> 10.0.to_f
=> 10.0