可変長浮動小数点計算クラスです。
_load(str) -> BigDecimal
[permalink][rdoc]引数で指定された文字列を元に BigDecimal オブジェクトを復元します。 Marshal.#load から呼び出されます。
[SEE_ALSO] BigDecimal#_dump, Marshal.#dump, Marshal.#load
double_fig -> Integer
[permalink][rdoc]Ruby の Float クラスが保持できる有効数字の数を返します。
require 'bigdecimal' 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 より優先されます。
require 'bigdecimal' n = 0 # デフォルト値 mf = BigDecimal::limit(n)
mode(s) -> Integer | nil
[permalink][rdoc]mode(s, v) -> Integer | nil
BigDecimal の計算処理の制御方法を設定、確認します。
第2引数を省略、または nil を指定すると現状の設定値を返します。
以下の使用方法が定義されています。
計算結果が非数(NaN)やゼロによる除算になったときの処理を定義することができます。
require 'bigdecimal' flag = false # デフォルト値 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が設定されているという意味です。
計算途中の丸め操作の指定ができます。
require 'bigdecimal' flag = BigDecimal::ROUND_HALF_UP # デフォルト値 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
このメソッドは deprecated です。Kernel.#BigDecimal を使用してください。
新しい BigDecimal オブジェクトを生成します。
詳しくは Kernel.#BigDecimal を参照してください。
ver -> String
[permalink][rdoc]このメソッドは deprecated です。
modulo(n) -> BigDecimal
[permalink][rdoc]self % n -> BigDecimal
self を n で割った余りを返します。
require 'bigdecimal' x = BigDecimal((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
[permalink][rdoc]積を計算します。
計算結果の精度についてはbigdecimal/計算精度についてを参照してください。
power(n) -> BigDecimal
[permalink][rdoc]power(n, prec) -> BigDecimal
self ** n -> BigDecimal
self の n 乗を計算します。
戻り値の有効桁数は self の有効桁数の n 倍以上になります。
self + other -> BigDecimal
[permalink][rdoc]和を計算します。
計算結果の精度についてはbigdecimal/計算精度についてを参照してください。
+ self -> self
[permalink][rdoc]self を返します。
self - other -> BigDecimal
[permalink][rdoc]差を計算します。
計算結果の精度についてはbigdecimal/計算精度についてを参照してください。
- self -> BigDecimal
[permalink][rdoc]self の符号を反転させたものを返します。
div(other) -> BigDecimal
[permalink][rdoc]quo(other) -> BigDecimal
self / other -> BigDecimal
商を計算します。
詳細は 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 で変換して比較される場合があります。
require 'bigdecimal' BigDecimal('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 から呼び出されます。
require 'bigdecimal' inf = BigDecimal('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 の絶対値を返します。
require 'bigdecimal' BigDecimal('5').abs.to_i # => 5 BigDecimal('-3').abs.to_i # => 3
add(other, n) -> BigDecimal
[permalink][rdoc]和を計算します。
self + other を最大で n 桁まで計算します。計算結果の精度が n より大きいときは BigDecimal.mode で指定された方法で丸められます。
[SEE_ALSO] BigDecimal#+
ceil -> Integer
[permalink][rdoc]ceil(n) -> BigDecimal
self 以上の整数のうち、最も小さい整数を計算し、その値を返します。
require "bigdecimal" BigDecimal("1.23456").ceil # => 2 BigDecimal("-1.23456").ceil # => -1
以下のように引数を与えて、小数点以下 n+1 位の数字を操作することもできます。 n >= 0 なら、小数点以下 n + 1 位の数字を操作します (小数点以下を、最大 n 桁にします)。 n が負のときは小数点以上 n 桁目を操作します (小数点位置から左に少なくとも n 個の 0 が並びます)。
require "bigdecimal" 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 の結果を元に行われます。
例:
require "bigdecimal" a = BigDecimal("1.0") b = a / 2.0 # => 0.5
other に Rational オブジェクトを指定した場合は self の有効桁数を用いて変換を行います。
数値を表す文字列から BigDecimal オブジェクトに変換する機能はデフォルトでは無効になっています。必要な場合は ENABLE_NUMERIC_STRING を有効にして Ruby をコンパイルしてください。
div(other, n) -> BigDecimal
[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("42") b = BigDecimal("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 以下の最大整数を返します。
require "bigdecimal" BigDecimal("1.23456").floor # => 1 BigDecimal("-1.23456").floor # => -2
以下のように引数 n を与えることもできます。 n >= 0 なら、小数点以下 n + 1 位の数字を操作します (小数点以下を、最大 n 桁にします)。 n が負のときは小数点以上 n 桁目を操作します (小数点位置から左に少なくとも n 個の 0 が並びます)。
require "bigdecimal" 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 オブジェクトを表す文字列を返します。
require "bigdecimal" BigDecimal("1234.5678").inspect # => "0.12345678e4"
mult(other, n) -> BigDecimal
[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 を返します。
require "bigdecimal" 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 で割った余りを返します。
require 'bigdecimal' x = BigDecimal((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 値)」にします。
require "bigdecimal" BigDecimal("1.23456").round # => 1 BigDecimal("-1.23456").round # => -1
以下のように引数を与えて、小数点以下 n+1 位の数字を操作することもできます。 n が正の時は、小数点以下 n+1 位の数字を丸めます(小数点以下を、最大 n 桁にします)。 n が負のときは小数点以上 n 桁目を丸めます(小数点位置から左に少なくとも n 個の 0 が並びます)。
require "bigdecimal" BigDecimal("1.23456").round(4).to_f # => 1.2346 BigDecimal("15.23456").round(-1).to_f # => 20.0
2番目の引数を指定すると、BigDecimal.mode の指定を無視して、指定された方法で丸め操作を実行します。
require "bigdecimal" BigDecimal("1.23456").round(3,BigDecimal::ROUND_HALF_EVEN).to_f # => 1.235 require "bigdecimal" BigDecimal("1.23356").round(3,BigDecimal::ROUND_HALF_EVEN).to_f # => 1.234
[SEE_ALSO] BigDecimal.mode
save_exception_mode { ... } -> object
[permalink][rdoc]例外処理に関する BigDecimal.mode の設定を保存してブロックを評価します。ブロック中で変更した設定はブロックの評価後に復元されます。
ブロックの評価結果を返します。
save_limit { ... } -> object
[permalink][rdoc]現在の BigDecimal.limit の設定を保存してブロックを評価します。ブロック中で変更した設定はブロックの評価後に復元されます。
ブロックの評価結果を返します。
save_rounding_mode { ... } -> object
[permalink][rdoc]丸め処理に関する BigDecimal.mode の設定を保存してブロックを評価します。ブロック中で変更した設定はブロックの評価後に復元されます。
ブロックの評価結果を返します。
sign -> Integer
[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 を配列で返します。
require "bigdecimal" a = BigDecimal("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
[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" の形になります)。
require "bigdecimal" BigDecimal("1.23456").to_s # ==> "0.123456E1"
引数 n に正の整数が指定されたときは、小数点で分けられる左右部分を、それぞれ n 桁毎に空白で区切ります。
require "bigdecimal" BigDecimal("0.1234567890123456789").to_s(10) # => "0.1234567890 123456789E0"
引数 n に正の整数を表す文字列を指定することもできます。
require "bigdecimal" BigDecimal("0.1234567890123456789").to_s("10") # => "0.1234567890 123456789E0"
文字列の最初に '+' または ' ' を付けると、値が正の場合先頭に '+' または ' ' が付きます。負の場合は常に '-' が付きます。
require "bigdecimal" 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') かを指定出来ます。デフォルトは指数形式です。
require "bigdecimal" 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 が並びます)。
require "bigdecimal" 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 を返します。
require "bigdecimal" BigDecimal("0").zero? # => true BigDecimal("1").zero? # => false
BASE -> Integer
[permalink][rdoc]ライブラリ内部で使用します。
EXCEPTION_ALL -> Integer
[permalink][rdoc]BigDecimal の計算において例外を発生させるかどうかを設定、確認する際の値を返します。
以下の例外全てが対象です。
BigDecimal.mode の第 1 引数に指定します。
EXCEPTION_INFINITY -> Integer
[permalink][rdoc]BigDecimal の計算結果が無限大になった場合に例外を発生させるかどうかを設定、確認する際の値を返します。
BigDecimal.mode の第 1 引数に指定します。
EXCEPTION_NaN -> Integer
[permalink][rdoc]BigDecimal の計算結果が NaN になった場合に例外を発生させるかどうかを設定、確認する際の値を返します。
BigDecimal.mode の第 1 引数に指定します。
EXCEPTION_OVERFLOW -> Integer
[permalink][rdoc]BigDecimal の計算結果の指数部がオーバーフローした場合に例外を発生させるかどうかを設定、確認する際の値を返します。
BigDecimal.mode の第 1 引数に指定します。
EXCEPTION_UNDERFLOW -> Integer
[permalink][rdoc]BigDecimal の計算結果の指数部がアンダーフローした場合に例外を発生させるかどうかを設定、確認する際の値を返します。
BigDecimal.mode の第 1 引数に指定します。
EXCEPTION_ZERODIVIDE -> Integer
[permalink][rdoc]BigDecimal に 0 による割り算を実行した場合に例外を発生させるかどうかを設定、確認する際の値を返します。
BigDecimal.mode の第 1 引数に指定します。
INFINITY -> BigDecimal
[permalink][rdoc]正の無限大を表す BigDecimal オブジェクトを返します。
NAN -> BigDecimal
[permalink][rdoc]NaN を表す BigDecimal オブジェクトを返します。
ROUND_CEILING -> Integer
[permalink][rdoc]BigDecimal の計算結果の丸め処理で数値の大きい方に繰り上げるかどうかを設定、確認する際の値を返します。
BigDecimal.mode の第 2 引数に指定します。
ROUND_DOWN -> Integer
[permalink][rdoc]BigDecimal の計算結果の丸め処理で全て切り捨てるかどうかを設定、確認する際の値を返します。
BigDecimal.mode の第 2 引数に指定します。
ROUND_FLOOR -> Integer
[permalink][rdoc]BigDecimal の計算結果の丸め処理で数値の小さい方に繰り下げるかどうかを設定、確認する際の値を返します。
BigDecimal.mode の第 2 引数に指定します。
ROUND_HALF_DOWN -> Integer
[permalink][rdoc]BigDecimal の計算結果の丸め処理で五捨六入するかどうかを設定、確認する際の値を返します。
BigDecimal.mode の第 2 引数に指定します。
ROUND_HALF_EVEN -> Integer
[permalink][rdoc]BigDecimal の計算結果の丸め処理で四捨六入するかどうかを設定、確認する際の値を返します。5の時は上位1桁が奇数の時のみ繰り上げます (Banker's rounding)。
BigDecimal.mode の第 2 引数に指定します。
ROUND_HALF_UP -> Integer
[permalink][rdoc]BigDecimal の計算結果の丸め処理で四捨五入するかどうかを設定、確認する際の値を返します。
BigDecimal.mode の第 2 引数に指定します。
ROUND_MODE -> Integer
[permalink][rdoc]BigDecimal の計算結果の丸め処理を設定、確認する際の値を返します。
BigDecimal.mode の第 1 引数に指定します。詳細については BigDecimal.mode を参照してください。
ROUND_UP -> Integer
[permalink][rdoc]BigDecimal の計算結果の丸め処理で全て切り上げするかどうかを設定、確認する際の値を返します。
BigDecimal.mode の第 2 引数に指定します。
SIGN_NEGATIVE_FINITE -> Integer
[permalink][rdoc]負の値に対応する BigDecimal#sign の値を返します。
SIGN_NEGATIVE_INFINITE -> Integer
[permalink][rdoc]負の無限大に対応する BigDecimal#sign の値を返します。
SIGN_NEGATIVE_ZERO -> Integer
[permalink][rdoc]負の 0 に対応する BigDecimal#sign の値を返します。
SIGN_NaN -> Integer
[permalink][rdoc]NaN に対応する BigDecimal#sign の値を返します。
SIGN_POSITIVE_FINITE -> Integer
[permalink][rdoc]正の値に対応する BigDecimal#sign の値を返します。
SIGN_POSITIVE_INFINITE -> Integer
[permalink][rdoc]正の無限大に対応する BigDecimal#sign の値を返します。
SIGN_POSITIVE_ZERO -> Integer
[permalink][rdoc]正の 0 に対応する BigDecimal#sign の値を返します。