組み込みクラス: 数値型クラス編
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