Ruby 1.8.7 リファレンスマニュアル > ライブラリ一覧 > 組み込みライブラリ > Numericクラス
クラスの継承リスト: Numeric < Comparable < Object < Kernel
数値を表す抽象クラスです。Fixnum や Float などの数値クラスは Numeric のサブクラスとして 実装されています。
演算や比較を行うメソッド(+, -, *, /, <=>)は Numeric のサブクラスで定義されま す。Numeric で定義されているメソッドは、サブクラスで提供されているメソッド (+, -, *, /, %) を利用して定義されるものがほとんどです。 つまり Numeric で定義されているメソッドは、Numeric のサブクラスとして新たに数値クラスを定義した時に、 演算メソッド(+, -, *, /, %, <=>, coerce)だけを定義すれば、数値クラスのそのほかのメソッドが 適切に定義されることを意図して提供されています。
+@, -@ は単項演算子 +, - を表しメソッド定義などではこの記法を利用します。
効率のため Numeric のメソッドと同じメソッドがサブクラスで再定義されている場合があります。
Numeric#coerce メソッドを使うことによって異なる数値クラス間で演算を行うこともできます。
ほとんどの数値関連のメソッドはサブクラスで再定義されています。これは、 効率のためであったり上位抽象クラスで実装を定義することができなかったり するためです。実際にどのメソッドがどのクラスに定義されているかは以下の 表を参照してください。
=> ruby 1.8.6 (2007-06-18 patchlevel 5000) [i686-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 - abs | o - o o o Numeric Integer Fixnum Bignum Float --------------------------------------------------------------------- ceil | o o - - o chr | - o - - - coerce | o - - o o div | o - o o - divmod | o - o o o downto | - o - - - eql? | o - - o o fdiv | 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 - - - nonzero? | o - - - - quo | o - o o - remainder | o - - o - Numeric Integer Fixnum Bignum Float --------------------------------------------------------------------- round | o o - - o singleton_method_added | o - - - - size | - - o o - step | o - - - - succ | - o - - - times | - o - - - to_f | - - o o o to_i | - o - - o to_int | o o - - o to_s | - - o o o Numeric Integer Fixnum Bignum Float --------------------------------------------------------------------- to_sym | - - o - - truncate | o o - - o upto | - o - - - zero? | o - o - o | | - - o o - ~ | - - o o -
Numeric#ceil, Numeric#floor, Numeric#round, Numeric#truncate のふるまいの違いの表です。左の実数に対して各メソッドを呼ぶと表のような数を 返します。
| ceil floor round truncate ---------------------------------------------------- 1.9 | 2 1 2 1 1.1 | 2 1 1 1 -1.1 | -1 -2 -1 -1 -1.9 | -1 -2 -2 -1
切上げはceil, floor を使用して以下のように定義できます。
if n > 0 then n.ceil else n.floor end
また、任意桁の切上げ、切捨て、四捨五入を行うメソッドは以下のように 定義できます。
class Numeric def roundup(d=0) x = 10**d if self > 0 (self * x).ceil.quo(x) else (self * x).floor.quo(x) end end def rounddown(d=0) x = 10**d if self < 0 (self * x).ceil.quo(x) else (self * x).floor.quo(x) end end def roundoff(d=0) x = 10**d if self < 0 (self * x - 0.5).ceil.quo(x) else (self * x + 0.5).floor.quo(x) end end end
定義 | 説明 | |
---|---|---|
+ -> self
|
単項演算子の + です。 self を返します。 |
|
- -> Numeric
|
単項演算子の - です。 self の符号を反転させたものを返します。 |
|
self <=> other -> -1 | 0 | 1 | nil
|
自身が other より大きい場合に 1 を、等しい場合に 0 を、小さい場合には -1 をそれぞれ返します。 自身と other が比較できない場合には nil を返します。 |
|
abs -> Numeric
|
自身が 0 以上ならば self を、そうでない場合は -self を返します。 |
|
ceil -> Integer
|
自身と等しいかより大きな整数のうち最小のものを返します。 |
|
clone
|
このメソッドを呼び出すことはできません。呼び出すと例外が発生します。 |
|
coerce(other) -> [Numeric]
|
自身と other が同じクラスになるよう、自身か other を変換し [other, self] という配列にして返します。 |
|
div(other) -> Integer
|
self を other で割った整数の商 q を返します。 |
|
divmod(other) -> [Numeric]
|
self を other で割った商 q と余り r を、 [q, r] という 2 要素の配列にして返します。 商 q は常に整数ですが、余り r は整数であるとは限りません。 |
|
eql?(other) -> bool
|
自身と other のクラスが等しくかつ == メソッドで比較して等しい場合に true を返します。 そうでない場合に false を返します。 |
|
quo(other) -> Float
|
self を other で割った実数の商を返します。 |
|
floor -> Integer
|
自身と等しいかより小さな整数のうち最大のものを返します。 |
|
integer? -> bool
|
self が整数の時、真を返します。そうでない場合に false を返します。 |
|
modulo(other) -> Numeric
|
self を other で割った余り r を返します。 |
|
nonzero? -> self | nil
|
自身がゼロの時 nil を返し、非ゼロの時 self を返します。 |
|
remainder(other) -> Numeric
|
self を other で割った余り r を返します。 |
|
round -> Integer
|
自身ともっとも近い整数を返します。 |
|
step(limit, step = 1) {|n| ... } -> self
|
self からはじめ step を足しながら limit を越える 前までブロックを繰り返します。step は負の数も指定できます。また、limit や step には Float なども 指定できます。 |
|
to_int -> Integer
|
self.to_i と同じです。 |
|
truncate -> Integer
|
自身と 0 との間にある整数で、自身にもっとも近い整数を返します。 |
|
zero? -> bool
|
自身がゼロの時、真を返します。そうでない場合は false を返します。 |
==
===
=~
__id__
__send__
_dump
class
dclone
display
enum_for
equal?
extend
freeze
frozen?
hash
initialize
initialize_copy
inspect
instance_eval
instance_exec
instance_of?
instance_variable_defined?
instance_variable_get
instance_variable_set
instance_variables
is_a?
marshal_dump
marshal_load
method
method_missing
methods
nil?
pretty_inspect
pretty_print
pretty_print_cycle
pretty_print_inspect
pretty_print_instance_variables
private_methods
protected_methods
public_methods
remove_instance_variable
respond_to?
singleton_method_added
singleton_method_removed
singleton_method_undefined
singleton_methods
taint
tainted?
tap
to_a
to_ary
to_hash
to_io
to_proc
to_regexp
to_s
to_str
to_yaml
to_yaml_properties
to_yaml_style
untaint
.new
定義 | 説明 | ライブラリ |
---|---|---|
arg -> Fixnum | Float
|
複素数として見た場合の偏角を[-π,π]の範囲で返します。 非負なら0、負なら Math::PI を返します。 |
complex |
conj -> self
|
複素数として見た場合の共役を返します。 つまり、self が実数の場合はselfを返します。 |
complex |
im -> Complex
|
実数に対し、純虚数化した Complex クラスのオブジェクトを返します。 |
complex |
image -> Fixnum
|
複素数として見た場合の虚部を返します。 つまり、self が実数の場合は 0 を返します。 |
complex |
real -> self
|
複素数として見た場合の実部を返します。 つまり、self が実数の場合はそのまま、selfを返します。 |
complex |