[TOP][UP][<-PREV][NEXT->]

Numeric

Numeric は数値の抽象クラスです。Ruby では coerce メソッドを使うことによって異なる数値クラス間で演算を行うことができます。

演算や比較を行うメソッド(+, -, *, /, <=>)などはサブクラスで定義されま す。また、効率のため Numeric のメソッドと同じメソッドがサブクラ スで再定義されている場合があります。

スーパークラス:

インクルードしているモジュール:

メソッド:

+ self

self 自身を返します。

- self

self の符号を反転させたものを返します。

self / other ((<ruby 1.7 feature>))

self を other で割った商を返します。

abs

self の絶対値を返します。

ceil

self と等しいかより大きい最小の整数(天井)を返します。

round, truncate, to_i, floor も参照。

clone
dup

self を返します。

ruby 1.7 feature: version 1.7 では数値などの immutable なオ ブジェクトは close や dup が禁止されています。

1.dup   # => in `clone': can't clone Fixnum (TypeError)
coerce(number)

number の型を自分と直接演算できる型に変換して [number, self] という配列に格納して返します。数値クラ スの算術演算子は通常自分と演算できないクラスをオペランドとして受け 取ると coerce を使って自分とオペランドを変換した上で演算を行 います。

divmod(other)

selfother で割った商 (q) と余り (m) を、 [q, m] という 2 要素の配列にして返します。

ここで、xy で割った商 q と余り m とい うのは、それぞれ

x = y * q + m  かつ  |m| < |y|

をみたす 整数 q と 数 m のことです。

ただし divmod では、上の条件に加えて、余りの符号を other と同じ(またはゼロ)にします。つまり

となります。

floor

self を超えない最大の整数(床)を返します。

round, truncate, to_i, ceil も参照。

integer?

self が整数の時、真を返します。

modulo(other)

self を other で割った余り m を返します(divmod 参照)。

ただし m の符号は other と同じ(またはゼロ)です。 つまり

となります。

nonzero?

ゼロの時、偽を返し、非ゼロの時 self を返します。

remainder(other)

self を other で割った余り r を返します (divmod参照)。

ただし r の符号は self と同じ(またはゼロ)です。 つまり

となります。

p (13.modulo(4))      #=>  1
p (13.modulo(-4))     #=> -3
p ((-13).modulo(4))   #=>  3
p ((-13).modulo(-4))  #=> -1

p (13.remainder(4))      #=>  1
p (13.remainder(-4))     #=>  1
p ((-13).remainder(4))   #=> -1
p ((-13).remainder(-4))  #=> -1
round

self に最も近い整数を返します。

truncate, to_i, ceil, floor も参照。

truncate

小数点以下を切捨てます。

round, to_i, ceil, floor も参照。

zero?

ゼロの時、真を返します。

数値関連クラスの定義メソッド

ほとんどの数値関連のメソッドはサブクラスで再定義されています。これは、 効率のためであったり上位抽象クラスで実装を定義することができなかったり するためです。実際にどのメソッドがどのクラスに定義されているかは以下の 表を参照してください。

cary = [Numeric, Integer, Fixnum, Bignum, Float]
mary = cary.collect {|c| c.instance_methods}
methods = []
mary.each {|m| methods |= m}

methods.sort.each_with_index {|op, i|
  if i % 10 == 0
    heading = sprintf("%10s   %10s %10s %10s %10s %10s",
                "", *cary.collect {|klass| klass.name.center(10)})
    puts heading
    puts "-" * heading.size
  end

  printf("%10s | %10s %10s %10s %10s %10s\n",
    op, *mary.collect {|methods| methods.member?(op) ? "o".center(10) : ""})
}

ruby 1.6.6 (2002-01-11) [i586-linux]

              Numeric    Integer     Fixnum     Bignum     Float   
-------------------------------------------------------------------
         % |                           o          o          o     
         & |                           o          o                
         * |                           o          o          o     
        ** |                           o          o          o     
         + |                           o          o          o     
        +@ |     o                                                 
         - |                           o          o          o     
        -@ |     o                     o          o          o     
         / |                           o          o          o     
         < |                           o                     o     
              Numeric    Integer     Fixnum     Bignum     Float   
-------------------------------------------------------------------
        << |                           o          o                
        <= |                           o                     o     
       <=> |                           o          o          o     
        == |                           o          o          o     
       === |     o                                o                
         > |                           o                     o     
        >= |                           o                     o     
        >> |                           o          o                
        [] |                           o          o                
         ^ |                           o          o                
              Numeric    Integer     Fixnum     Bignum     Float   
-------------------------------------------------------------------
       abs |     o                     o          o          o     
      ceil |     o          o                                o     
       chr |                o                                      
     clone |     o                                                 
    coerce |     o                                o          o     
    divmod |     o                     o          o          o     
    downto |                o          o                           
      eql? |     o                                o          o     
   finite? |                                                 o     
     floor |     o          o                                o     
              Numeric    Integer     Fixnum     Bignum     Float   
-------------------------------------------------------------------
      hash |                                      o          o     
   id2name |                           o                           
 infinite? |                                                 o     
  integer? |     o          o                                      
    modulo |     o                     o          o          o     
      nan? |                                                 o     
      next |                o          o                           
  nonzero? |     o                                                 
 remainder |     o                                o                
     round |     o          o                                o     
              Numeric    Integer     Fixnum     Bignum     Float   
-------------------------------------------------------------------
      size |                           o          o                
      step |                o          o                           
      succ |                o          o                           
     times |                o          o                           
      to_f |                           o          o          o     
      to_i |                o                                o     
    to_int |                o                                      
      to_s |                           o          o          o     
  truncate |     o          o                                o     
      type |                           o                           
              Numeric    Integer     Fixnum     Bignum     Float   
-------------------------------------------------------------------
      upto |                o          o                           
     zero? |     o                     o          o          o     
         | |                           o          o                
         ~ |                           o          o                

[TOP][UP][<-PREV][NEXT->]