Ruby 1.9.2 リファレンスマニュアル > ライブラリ一覧 > bigdecimalライブラリ > BigDecimalクラス
クラスの継承リスト: BigDecimal < Numeric < Comparable < Object < Kernel < BasicObject
可変長浮動小数点計算クラスです。
_load(str) -> BigDecimal
[permalink][rdoc]引数で指定された文字列を元に BigDecimal オブジェクトを復元します。 Marshal.#load から呼び出されます。
[SEE_ALSO] BigDecimal#_dump, Marshal.#dump, Marshal.#load
double_fig -> Fixnum
[permalink][rdoc]Ruby の Float クラスが保持できる有効数字の数を返します。
p BigDecimal::double_fig # ==> 20 (depends on the CPU etc.)
double_figは以下の C プログラムの結果と同じです。
double v = 1.0; int double_fig = 0; while (v + 1.0 > 1.0) { ++double_fig; v /= 10; }
limit(n = nil) -> Integer
[permalink][rdoc]生成されるBigDecimalオブジェクトの最大桁数をn桁に制限します。 n を指定しない、または n が nil の場合は、現状の最大桁数が返ります。
戻り値は設定する前の値です。設定値のデフォルト値は0で、桁数無制限を表しています。
計算を続行する間に、数字の桁数が無制限に増えてしまうような場合 limit で 予め桁数を制限できます。この場合 BigDecimal.mode で指定された丸め処理が 実行されます。ただし、インスタンスメソッド (BigDecimal#truncate / BigDecimal#round / BigDecimal#ceil / BigDecimal#floor / BigDecimal#add/ BigDecimal#sub / BigDecimal#mult / BigDecimal#div) の桁数制限は limit より優先されます。
mf = BigDecimal::limit(n)
mode(s) -> Fixnum | nil
[permalink][rdoc]mode(s, v) -> Fixnum | nil
BigDecimal の計算処理の制御方法を設定、確認します。
第2引数を省略、または nil を指定すると現状の設定値を返します。
以下の使用方法が定義されています。
計算結果が非数(NaN)やゼロによる除算になったときの処理を定義することができます。
f = BigDecimal::mode(BigDecimal::EXCEPTION_NaN,flag) f = BigDecimal::mode(BigDecimal::EXCEPTION_INFINITY,flag) f = BigDecimal::mode(BigDecimal::EXCEPTION_UNDERFLOW,flag) f = BigDecimal::mode(BigDecimal::EXCEPTION_OVERFLOW,flag) f = BigDecimal::mode(BigDecimal::EXCEPTION_ZERODIVIDE,flag) f = BigDecimal::mode(BigDecimal::EXCEPTION_ALL,flag)
flag が true のときは、指定した状態になったときに例外を発行するようになります。 flag が false(デフォルト)なら、例外は発行されません。計算結果は以下のようになります。
BigDecimal::EXCEPTION_INFINITY、BigDecimal::EXCEPTION_OVERFLOW、 BigDecimal::EXCEPTION_ZERODIVIDE は今のところ同じです。 戻り値は、設定後の値です。「値」の意味は、例えば BigDecimal::EXCEPTION_NaN と「値」の & が ゼロ以外ならば BigDecimal::EXCEPTION_NaNが設定されているという意味です。
計算途中の丸め操作の指定ができます。
f = BigDecimal::mode(BigDecimal::ROUND_MODE,flag)
の形式で指定します。 ここで、flag は以下(括弧内は対応するインスタンスメソッド)の一つを指定します。
戻り値は指定後の flag の値です。第2引数に nil を指定すると、現状の設定値が返ります。 mode メソッドでは丸め操作の位置をユーザが指定することはできません。丸め操作と位置を自分で制御したい場合は BigDecimal::limit や truncate/round/ceil/floor、 add/sub/mult/div といったインスタンスメソッドを使用して下さい。
new(s) -> BigDecimal
[permalink][rdoc]new(s, n) -> BigDecimal
新しい BigDecimal オブジェクトを生成します。
BigDecimal("1") / BigDecimal("3") # => 0.3333333333 33E0 BigDecimal("1",10) / BigDecimal("3",10) # => 0.3333333333 3333333333 33333333E0ただし、個々の演算における最大有効桁数 n の取り扱いは将来のバー ジョンで若干変更される可能性があります。
[SEE_ALSO] Kernel.#BigDecimal
ver -> String
[permalink][rdoc]bigdecimal ライブラリのバージョンを文字列で返します。
過去のバージョンはそれぞれ以下です。
modulo(n) -> BigDecimal
[permalink][rdoc]self % n -> BigDecimal
self を n で割った余りを返します。
x = BigDecimal.new((2**100).to_s) ( x % 3).to_i # => 1 (-x % 3).to_i # => 2 ( x % -3).to_i # => -2 (-x % -3).to_i # => -1
戻り値は n と同じ符号になります。これは BigDecimal#remainder とは 異なる点に注意してください。詳細は Numeric#%、 Numeric#remainder を参照して下さい。
self * other -> BigDecimal | Float
[permalink][rdoc]積を計算します。
計算結果の精度についてはbigdecimal/計算精度についてを参照してください。
power(n) -> BigDecimal
[permalink][rdoc]self ** n -> BigDecimal
self の n 乗を計算します。
戻り値の有効桁数は self の有効桁数の n 倍以上になります。
self + other -> BigDecimal | Float
[permalink][rdoc]和を計算します。
計算結果の精度についてはbigdecimal/計算精度についてを参照してください。
+ self -> self
[permalink][rdoc]self を返します。
self - other -> BigDecimal | Float
[permalink][rdoc]差を計算します。
計算結果の精度についてはbigdecimal/計算精度についてを参照してください。
- self -> BigDecimal
[permalink][rdoc]self の符号を反転させたものを返します。
div(other) -> BigDecimal | Float
[permalink][rdoc]quo(other) -> BigDecimal | Float
self / other -> BigDecimal | Float
商を計算します。
詳細は Float#quo を参照して下さい。
計算結果の精度についてはbigdecimal/計算精度についてを参照してください。
self < other -> bool
[permalink][rdoc]self が other より小さい場合に true を、そうでない場合に false を返しま す。
self <= other -> bool
[permalink][rdoc]self が other より小さいか等しい場合に true を、そうでない場合に false を返します。
self <=> other -> -1 | 0 | 1 | nil
[permalink][rdoc]self が other より大きい場合に 1 を、等しい場合に 0 を、小さい場合には -1 をそれぞれ返します。
self と other が比較できない場合には nil を返します。
self == other -> bool
[permalink][rdoc]self === other -> bool
eql?(other) -> bool
self が other と等しい場合に true を、そうでない場合に false を返します。
それぞれの値は BigDecimal#coerce で変換して比較される場合があります。
BigDecimal.new('1.0') == 1.0 # => true
self > other -> bool
[permalink][rdoc]self が other より大きい場合に true を、そうでない場合に false を返しま す。
self >= other -> bool
[permalink][rdoc]self が other より大きいか等しい場合に true を、そうでない場合に false を返します。
_dump -> String
[permalink][rdoc]BigDecimal._load で復元可能な文字列を返します。 Marshal.#dump から呼び出されます。
inf = BigDecimal.new('Infinity') # => #<BigDecimal:1e16fa8,'Infinity',9(9)> s = Marshal.dump(inf) # => "\x04\bu:\x0FBigDecimal\x0F4:Infinity" Marshal.load(s) # => #<BigDecimal:82b5090,'Infinity',4(4)>
[SEE_ALSO] BigDecimal._load, Marshal.#dump, Marshal.#load
abs -> BigDecimal
[permalink][rdoc]self の絶対値を返します。
BigDecimal('5').abs.to_i # => 5 BigDecimal('-3').abs.to_i # => 3
add(other, n) -> BigDecimal | Float
[permalink][rdoc]和を計算します。
self + other を最大で n 桁まで計算します。計算結果の精度が n より大きい ときは BigDecimal.mode で指定された方法で丸められます。
[SEE_ALSO] BigDecimal#+
ceil -> Integer
[permalink][rdoc]ceil(n) -> BigDecimal
self 以上の整数のうち、最も小さい整数を計算し、その値を返します。
BigDecimal("1.23456").ceil # => 2 BigDecimal("-1.23456").ceil # => -1
以下のように引数を与えて、小数点以下 n+1 位の数字を操作することもできます。 n >= 0 なら、小数点以下 n + 1 位の数字を操作します (小数点以下を、最大 n 桁にします)。 n が負のときは小数点以上 n 桁目を操作します (小数点位置から左に少なくとも n 個の 0 が並びます)。
BigDecimal("1.23456").ceil(4).to_f # => 1.2346 BigDecimal("15.23456").ceil(-1).to_f # => 20.0
coerce(other) -> Array
[permalink][rdoc]self と other が同じクラスになるよう、self か other を変換し [other, self] という配列にして返します。
BigDecimal#coerce は Ruby における強制型変換のための機能です。 BigDecimal オブジェクトとその他のオブジェクト間の各種の計算は BigDecimal#coerce の結果を元に行われます。
例:
a = BigDecimal.new("1.0") b = a / 2.0 # => 0.5
数値を表す文字列から BigDecimal オブジェクトに変換する機能はデフォ ルトでは無効になっています。必要な場合は ENABLE_NUMERIC_STRING を有効に して Ruby をコンパイルしてください。
div(other, n) -> BigDecimal | Float
[permalink][rdoc]商を計算します。
self / other を最大で n 桁まで計算します。計算結果の精度が n より大きい ときは BigDecimal.mode で指定された方法で丸められます。
[SEE_ALSO] BigDecimal#/
divmod(n) -> [BigDecimal, BigDecimal]
[permalink][rdoc]self を other で割った商 q と余り r を、 [q, r] という 2 要素の配列にし て返します。
商は負の無限大負方向に丸められます。
例:
require 'bigdecimal' a = BigDecimal.new("42") b = BigDecimal.new("9") a.divmod(b) # => [#<BigDecimal:f74b3a14,'0.4E1',4(16)>, #<BigDecimal:f74b3a64,'0.6E1',4(12)>]
exponent -> Integer
[permalink][rdoc]self の指数部を整数値で返します。
finite? -> bool
[permalink][rdoc]self が ∞または NaN でないときに true を返します。それ以外のときに false を返します。
fix -> BigDecimal
[permalink][rdoc]self の整数部分を新しい BigDecimal オブジェクトにして返します。
floor -> Integer
[permalink][rdoc]floor(n) -> BigDecimal
self 以下の最大整数を返します。
BigDecimal("1.23456").floor # => 1 BigDecimal("-1.23456").floor # => -2
以下のように引数 n を与えることもできます。 n >= 0 なら、小数点以下 n + 1 位の数字を操作します (小数点以下を、最大 n 桁にします)。 n が負のときは小数点以上 n 桁目を操作します (小数点位置から左に少なくとも n 個の 0 が並びます)。
BigDecimal("1.23456").floor(4).to_f # => 1.2345 BigDecimal("15.23456").floor(-1).to_f # => 10.0
frac -> BigDecimal
[permalink][rdoc]self の小数部分を新しい BigDecimal オブジェクトにして返します。
hash -> Integer
[permalink][rdoc]self のハッシュ値を返します。
符号、小数部、指数部が同じ場合に同じハッシュ値を返します。
infinite? -> 1 | -1 | nil
[permalink][rdoc]self が +∞のときに 1 、-∞のときに-1、それ以外のときに nil を返します。
inspect -> String
[permalink][rdoc]BigDecimal オブジェクトを表す文字列を返します。
BigDecimal.new("1234.5678").inspect # => "#<BigDecimal:b7ea1130,'0.12345678E4',8(12)>"
最初の16進数はオブジェクトのアドレス、次の文字列 '0.12345678E4' は値、 最後の値 8(12) は現在の有効桁数(最大有効数字)を表します。
mult(other, n) -> BigDecimal | Float
[permalink][rdoc]積を計算します。
self * other を最大で n 桁まで計算します。計算結果の精度が n より大きい ときは BigDecimal.mode で指定された方法で丸められます。
[SEE_ALSO] BigDecimal#*
nan? -> bool
[permalink][rdoc]self が NaN のときに true を返します。それ以外のときに false を返します。
nonzero? -> self | nil
[permalink][rdoc]self が 0 以外のときに self を返します。0 のときに nil を返します。
BigDecimal("0").nonzero? # => nil BigDecimal("1").nonzero? # => #<BigDecimal:f7236228,'0.1E1',4(8)>
precs -> [Integer, Integer]
[permalink][rdoc]self の有効数字と最大有効数字の配列を返します。
remainder(n) -> BigDecimal
[permalink][rdoc]self を n で割った余りを返します。
x = BigDecimal.new((2**100).to_s) x.remainder(3).to_i # => 1 (-x).remainder(3).to_i # => -1 x.remainder(-3).to_i # => 1 (-x).remainder(-3).to_i # => -1
戻り値は self と同じ符号になります。これは BigDecimal#% とは異な る点に注意してください。詳細は Numeric#%、 Numeric#remainder を参照して下さい。
round -> Integer
[permalink][rdoc]round(n) -> BigDecimal
round(n, b) -> BigDecimal
クラスメソッド BigDecimal.mode(BigDecimal::ROUND_MODE,flag) で指定した BigDecimal::ROUND_MODE に従って丸め操作を実行します。
BigDecimal.mode(BigDecimal::ROUND_MODE,flag) で何も指定せず、 かつ、引数を指定しない場合は 「小数点以下第一位の数を四捨五入して整数(BigDecimal 値)」にします。
BigDecimal("1.23456").round # => 1 BigDecimal("-1.23456").round # => -1
以下のように引数を与えて、小数点以下 n+1 位の数字を操作することもできます。 n が正の時は、小数点以下 n+1 位の数字を丸めます(小数点以下を、最大 n 桁にします)。 n が負のときは小数点以上 n 桁目を丸めます(小数点位置から左に少なくとも n 個の 0 が並びます)。
BigDecimal("1.23456").round(4).to_f # => 1.2346 BigDecimal("15.23456").round(-1).to_f # => 20.0
2番目の引数を指定すると、BigDecimal.mode の指定を無視して、指定さ れた方法で丸め操作を実行します。
BigDecimal("1.23456").round(3,BigDecimal::ROUND_HALF_EVEN).to_f # => 1.234 BigDecimal("1.23356").round(3,BigDecimal::ROUND_HALF_EVEN).to_f # => 1.234
[SEE_ALSO] BigDecimal.mode
sign -> Fixnum
[permalink][rdoc]値が正 (sign > 0)、負 (sign < 0)、その他 (sign == 0) であるかの情報を返します。
n = a.sign
としたとき n の値は a が以下のときを意味します。() の中の数字は、実際の 値です (「bigdecimal/内部構造」を参照)。
n = BigDecimal::SIGN_NaN(0) # a は NaN n = BigDecimal::SIGN_POSITIVE_ZERO(1) # a は +0 n = BigDecimal::SIGN_NEGATIVE_ZERO(-1) # a は -0 n = BigDecimal::SIGN_POSITIVE_FINITE(2) # a は正の値 n = BigDecimal::SIGN_NEGATIVE_FINITE(-2) # a は負の値 n = BigDecimal::SIGN_POSITIVE_INFINITE(3) # a は+Infinity n = BigDecimal::SIGN_NEGATIVE_INFINITE(-3) # a は-Infinity
split -> [Integer, String, Integer, Integer]
[permalink][rdoc]BigDecimal 値を 0.xxxxxxx*10**n と表現したときに、 符号 (NaNのときは 0、それ以外は+1か-1になります)、 仮数部分の文字列("xxxxxxx")と、基数(10)、更に指数 n を配列で返します。
a = BigDecimal::new("3.14159265") f, x, y, z = a.split
とすると、f =+ 1、x = "314159265"、y = 10、z = 1 になります。 従って、以下のようにする事で Float に変換することができます。
s = "0."+x b = f*(s.to_f)*(y**z)
[SEE_ALSO] BigDecimal#to_f
sqrt(n) -> BigDecimal
[permalink][rdoc]self の有効桁 n 桁の平方根 (n の平方根ではありません) をニュートン法で 計算します。
sub(other, n) -> BigDecimal | Float
[permalink][rdoc]差を計算します。
self - other を最大で n 桁まで計算します。計算結果の精度が n より大きい ときは BigDecimal.mode で指定された方法で丸められます。
[SEE_ALSO] BigDecimal#-
to_f -> Float
[permalink][rdoc]self の近似値を表す Float オブジェクトに変換します。
仮数部や指数部の情報が必要な場合は、BigDecimal#split メソッドを利 用してください。
[SEE_ALSO] BigDecimal#split
to_i -> Integer
[permalink][rdoc]to_int -> Integer
self の小数点以下を切り捨てて整数に変換します。
to_r -> Rational
[permalink][rdoc]self を Rational オブジェクトに変換します。
to_s -> String
[permalink][rdoc]to_s(n) -> String
self を文字列に変換します (デフォルトは "0.xxxxxEn" の形になります)。
BigDecimal("1.23456").to_s # ==> "0.123456E1"
引数 n に正の整数が指定されたときは、小数点で分けられる左右部分を、 それぞれ n 桁毎に空白で区切ります。
BigDecimal("0.1234567890123456789").to_s(10) # => "0.1234567890 123456789E0"
引数 n に正の整数を表す文字列を指定することもできます。
BigDecimal("0.1234567890123456789").to_s("10") # => "0.1234567890 123456789E0"
文字列の最初に '+' または ' ' を付けると、値が正の場合先頭に '+' または ' ' が付きます。負の場合は常に '-' が付きます。
BigDecimal("0.123456").to_s(" 3") # => " 0.123 456E0" BigDecimal("0.123456").to_s("+3") # => "+0.123 456E0" BigDecimal("-0.123456").to_s("3") # => "-0.123 456E0"
さらに文字列の最後に指数形式 ('E' または 'e') か指数を使わない形式 ('F' または 'f') かを指定出来ます。デフォルトは指数形式です。
BigDecimal("123.456").to_s("E") # => "0.123456E3" BigDecimal("123.456").to_s("e") # => "0.123456E3" # (小文字で指定しても出力は 'E' になる) BigDecimal("123.456").to_s("F") # => "123.456" BigDecimal("1234.5678").to_s("3F") # => "123 4.567 8"
truncate -> Integer
[permalink][rdoc]truncate(n) -> BigDecimal
小数点以下の数を切り捨てて整数にします。
以下のように引数を与えて、小数点以下 n+1 位の数字を操作することもできます。 n が正の時は、小数点以下 n+1 位の数字を切り捨てます (小数点以下を、最大 n 桁にします)。 n が負のときは小数点以上 n 桁目を操作します (小数点位置から左に少なくとも n 個の 0 が並びます)。
BigDecimal("1.23456").truncate(4).to_f # => 1.2345 BigDecimal("15.23456").truncate(-1).to_f # => 10.0
zero? -> bool
[permalink][rdoc]self が 0 のときに true を返します。それ以外のときに false を返します。
BigDecimal("0").zero? # => true BigDecimal("1").zero? # => false
BASE -> Fixnum
[permalink][rdoc]ライブラリ内部で使用します。
EXCEPTION_ALL -> Fixnum
[permalink][rdoc]BigDecimal の計算において例外を発生させるかどうかを設定、確認する 際の値を返します。
以下の例外全てが対象です。
BigDecimal.mode の第 1 引数に指定します。
EXCEPTION_INFINITY -> Fixnum
[permalink][rdoc]BigDecimal の計算結果が無限大になった場合に例外を発生させるかどう かを設定、確認する際の値を返します。
BigDecimal.mode の第 1 引数に指定します。
EXCEPTION_NaN -> Fixnum
[permalink][rdoc]BigDecimal の計算結果が NaN になった場合に例外を発生させるかどう かを設定、確認する際の値を返します。
BigDecimal.mode の第 1 引数に指定します。
EXCEPTION_OVERFLOW -> Fixnum
[permalink][rdoc]BigDecimal の計算結果の指数部がオーバーフローした場合に例外を発生 させるかどうかを設定、確認する際の値を返します。
BigDecimal.mode の第 1 引数に指定します。
EXCEPTION_UNDERFLOW -> Fixnum
[permalink][rdoc]BigDecimal の計算結果の指数部がアンダーフローした場合に例外を発生 させるかどうかを設定、確認する際の値を返します。
BigDecimal.mode の第 1 引数に指定します。
EXCEPTION_ZERODIVIDE -> Fixnum
[permalink][rdoc]BigDecimal に 0 による割り算を実行した場合に例外を発生させるかど うかを設定、確認する際の値を返します。
BigDecimal.mode の第 1 引数に指定します。
ROUND_CEILING -> Fixnum
[permalink][rdoc]BigDecimal の計算結果の丸め処理で数値の大きい方に繰り上げるかどう かを設定、確認する際の値を返します。
BigDecimal.mode の第 2 引数に指定します。
ROUND_DOWN -> Fixnum
[permalink][rdoc]BigDecimal の計算結果の丸め処理で全て切り捨てるかどうかを設定、確 認する際の値を返します。
BigDecimal.mode の第 2 引数に指定します。
ROUND_FLOOR -> Fixnum
[permalink][rdoc]BigDecimal の計算結果の丸め処理で数値の小さい方に繰り下げるかどう かを設定、確認する際の値を返します。
BigDecimal.mode の第 2 引数に指定します。
ROUND_HALF_DOWN -> Fixnum
[permalink][rdoc]BigDecimal の計算結果の丸め処理で五捨六入するかどうかを設定、確認 する際の値を返します。
BigDecimal.mode の第 2 引数に指定します。
ROUND_HALF_EVEN -> Fixnum
[permalink][rdoc]BigDecimal の計算結果の丸め処理で四捨六入するかどうかを設定、確認 する際の値を返します。5の時は上位1桁が奇数の時のみ繰り上げます (Banker's rounding)。
BigDecimal.mode の第 2 引数に指定します。
ROUND_HALF_UP -> Fixnum
[permalink][rdoc]BigDecimal の計算結果の丸め処理で四捨五入するかどうかを設定、確認 する際の値を返します。
BigDecimal.mode の第 2 引数に指定します。
ROUND_MODE -> Fixnum
[permalink][rdoc]BigDecimal の計算結果の丸め処理を設定、確認する際の値を返します。
BigDecimal.mode の第 1 引数に指定します。詳細については BigDecimal.mode を参照してください。
ROUND_UP -> Fixnum
[permalink][rdoc]BigDecimal の計算結果の丸め処理で全て切り上げするかどうかを設定、 確認する際の値を返します。
BigDecimal.mode の第 2 引数に指定します。
SIGN_NEGATIVE_FINITE -> Fixnum
[permalink][rdoc]負の値に対応する BigDecimal#sign の値を返します。
SIGN_NEGATIVE_INFINITE -> Fixnum
[permalink][rdoc]負の無限大に対応する BigDecimal#sign の値を返します。
SIGN_NEGATIVE_ZERO -> Fixnum
[permalink][rdoc]負の 0 に対応する BigDecimal#sign の値を返します。
SIGN_NaN -> Fixnum
[permalink][rdoc]NaN に対応する BigDecimal#sign の値を返します。
SIGN_POSITIVE_FINITE -> Fixnum
[permalink][rdoc]正の値に対応する BigDecimal#sign の値を返します。
SIGN_POSITIVE_INFINITE -> Fixnum
[permalink][rdoc]正の無限大に対応する BigDecimal#sign の値を返します。
SIGN_POSITIVE_ZERO -> Fixnum
[permalink][rdoc]正の 0 に対応する BigDecimal#sign の値を返します。