Ruby 1.9.3 リファレンスマニュアル > ライブラリ一覧 > bigdecimalライブラリ > BigDecimalクラス

class BigDecimal

クラスの継承リスト: BigDecimal < Numeric < Comparable < Object < Kernel < BasicObject

要約

可変長浮動小数点計算クラスです。

目次

特異メソッド
_load double_fig limit mode new ver
インスタンスメソッド
% modulo * ** power + +@ - -@ / div quo < <= <=> == === eql? > >= _dump abs add ceil coerce div divmod exponent finite? fix floor frac hash infinite? inspect mult nan? nonzero? precs remainder round save_exception_mode save_limit save_rounding_mode sign split sqrt sub to_f to_i to_int to_r to_s truncate zero?
定数
BASE EXCEPTION_ALL EXCEPTION_INFINITY EXCEPTION_NaN EXCEPTION_OVERFLOW EXCEPTION_UNDERFLOW EXCEPTION_ZERODIVIDE INFINITY NAN ROUND_CEILING ROUND_DOWN ROUND_FLOOR ROUND_HALF_DOWN ROUND_HALF_EVEN ROUND_HALF_UP ROUND_MODE ROUND_UP SIGN_NEGATIVE_FINITE SIGN_NEGATIVE_INFINITE SIGN_NEGATIVE_ZERO SIGN_NaN SIGN_POSITIVE_FINITE SIGN_POSITIVE_INFINITE SIGN_POSITIVE_ZERO

特異メソッド

_load(str) -> BigDecimal[permalink][rdoc]

引数で指定された文字列を元に BigDecimal オブジェクトを復元します。 Marshal.#load から呼び出されます。

[PARAM] str:
復元する値を表す文字列を指定します。
[EXCEPTION] TypeError:
引数に不正な文字が含まれる場合に発生します。

[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)
[PARAM] n:
新しい最大桁数を正の整数で指定します。
[EXCEPTION] TypeError:
n に Fixnum、nil 以外のオブジェクトを指定した場 合に発生します。
[EXCEPTION] ArgumentError:
n に負の数を指定した場合に発生します。
mode(s) -> Fixnum | nil[permalink][rdoc]
mode(s, v) -> Fixnum | nil

BigDecimal の計算処理の制御方法を設定、確認します。

第2引数を省略、または nil を指定すると現状の設定値を返します。

[PARAM] s:
制御方法の設定、確認を行う項目を BigDecimal::EXCEPTION_*、 BigDecimal::ROUND_MODE のいずれかで指定します。
[PARAM] v:
引数 s が BigDecimal::ROUND_MODE の場合は BigDecimal::ROUND_MODE 以外の BigDecimal::_ROUND* のいず れかを指定します。指定した丸め処理が有効になります。 それ以外の場合は、true、false、nil のいずれかを指定します。 true を指定した場合は設定値が有効になり、false を指定した場合 は設定値が無効になります。
[EXCEPTION] TypeError:
引数 s に有効でない値を指定した場合に発生します。
[EXCEPTION] ArgumentError:
引数 s に例外処理に関する値を指定し、引数 v に true、false 以外の値を指定した場合に発生します。

以下の使用方法が定義されています。

例外処理

計算結果が非数(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_INFINITYBigDecimal::EXCEPTION_OVERFLOWBigDecimal::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 オブジェクトを生成します。

[PARAM] s:
数値を表現する初期値を文字列、FixnumBignumFloatRationalBigDecimal オブジェクトのい ずれかで指定します。 文字列中のスペースは無視されます。また、判断できない文字が出現 した時点で文字列は終了したものとみなされます。
[PARAM] n:
必要な有効桁数(self の最大有効桁数)を整数で指定します。 n が 0 または省略されたときは、n の値は s の有効桁数とみなされます。 s の有効桁数より n が小さいときもn = 0 のときと同じです。 self の最大有効桁数は n より若干大きい値が採用されます。最大有 効桁数は以下のような割り算を実行するとき等に意味を持ちます。
  BigDecimal("1")    / BigDecimal("3")    # => 0.3333333333 33E0
  BigDecimal("1",10) / BigDecimal("3",10) # => 0.3333333333 3333333333 33333333E0
ただし、個々の演算における最大有効桁数 n の取り扱いは将来のバー ジョンで若干変更される可能性があります。
[EXCEPTION] TypeError:
s に 文字列、FixnumBignumFloatRationalBigDecimal 以外のオブジェクトを 指定した場合に発生します。
[EXCEPTION] TypeError:
n に Fixnum 以外のオブジェクトを指定した場合に発 生します。
[EXCEPTION] ArgumentError:
s に Float オブジェクトを指定し、n に Float::DIG + 2 以上の値を指定した場合に発生します。 s に FloatRational オブジェクトを指 定し、n を省略した場合に発生します。
[EXCEPTION] ArgumentError:
n に負の数を指定した場合に発生します。

[SEE_ALSO] Kernel.#BigDecimal

ver -> String[permalink][rdoc]

bigdecimal ライブラリのバージョンを文字列で返します。

過去のバージョンはそれぞれ以下です。

インスタンスメソッド

modulo(n) -> BigDecimal[permalink][rdoc]
self % n -> BigDecimal

self を n で割った余りを返します。

[PARAM] n:
self を割る数を指定します。
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[permalink][rdoc]

積を計算します。

[PARAM] other:
self に掛ける数を指定します。

計算結果の精度についてはbigdecimal/計算精度についてを参照してください。

power(n) -> BigDecimal[permalink][rdoc]
power(n, prec) -> BigDecimal
self ** n -> BigDecimal

self の n 乗を計算します。

戻り値の有効桁数は self の有効桁数の n 倍以上になります。

[PARAM] n:
selfを other 乗する数を指定します。
[PARAM] prec:
有効桁数を整数で指定します。
[EXCEPTION] TypeError:
prec に Fixnum 以外のオブジェクトを指定した場合 に発生します。
self + other -> BigDecimal[permalink][rdoc]

和を計算します。

[PARAM] other:
self に足す数を指定します。

計算結果の精度についてはbigdecimal/計算精度についてを参照してください。

+ self -> self[permalink][rdoc]

self を返します。

self - other -> BigDecimal[permalink][rdoc]

差を計算します。

[PARAM] other:
self から引く数を指定します。

計算結果の精度についてはbigdecimal/計算精度についてを参照してください。

- self -> BigDecimal[permalink][rdoc]

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

div(other) -> BigDecimal[permalink][rdoc]
quo(other) -> BigDecimal
self / other -> BigDecimal

商を計算します。

[PARAM] other:
self を割る数を指定します。

詳細は 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[permalink][rdoc]

和を計算します。

self + other を最大で n 桁まで計算します。計算結果の精度が n より大きい ときは BigDecimal.mode で指定された方法で丸められます。

[PARAM] other:
self に足す数を指定します。
[PARAM] n:
有効桁数を整数で指定します。0 を指定した場合は BigDecimal#+ と同じ値を返します。
[EXCEPTION] TypeError:
n に Fixnum 以外のオブジェクトを指定した場合に発 生します。
[EXCEPTION] ArgumentError:
n に負の数を指定した場合に発生します。

[SEE_ALSO] BigDecimal#+

ceil -> Integer[permalink][rdoc]
ceil(n) -> BigDecimal

self 以上の整数のうち、最も小さい整数を計算し、その値を返します。

[PARAM] n:
小数点以下の桁数を整数で指定します。
[EXCEPTION] TypeError:
n に Fixnum 以外のオブジェクトを指定した場合に発 生します。
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] という配列にして返します。

[PARAM] other:
比較または変換するオブジェクト

BigDecimal#coerce は Ruby における強制型変換のための機能です。 BigDecimal オブジェクトとその他のオブジェクト間の各種の計算は BigDecimal#coerce の結果を元に行われます。

例:

a = BigDecimal.new("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 で指定された方法で丸められます。

[PARAM] other:
self を割る数を指定します。
[PARAM] n:
有効桁数を整数で指定します。省略するか 0 を指定した場合は BigDecimal#/ と同じ値を返します。
[EXCEPTION] TypeError:
n に Fixnum 以外のオブジェクトを指定した場合に発 生します。
[EXCEPTION] ArgumentError:
n に負の数を指定した場合に発生します。

[SEE_ALSO] BigDecimal#/

divmod(n) -> [BigDecimal, BigDecimal][permalink][rdoc]

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

商は負の無限大負方向に丸められます。

[PARAM] n:
self を割る数を指定します。

例:

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 以下の最大整数を返します。

[PARAM] n:
小数点以下の桁数を整数で指定します。
[EXCEPTION] TypeError:
n に Fixnum 以外のオブジェクトを指定した場合に発 生します。
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[permalink][rdoc]

積を計算します。

self * other を最大で n 桁まで計算します。計算結果の精度が n より大きい ときは BigDecimal.mode で指定された方法で丸められます。

[PARAM] other:
self に掛ける数を指定します。
[PARAM] n:
有効桁数を整数で指定します。0 を指定した場合は BigDecimal#* と同じ値を返します。
[EXCEPTION] TypeError:
n に Fixnum 以外のオブジェクトを指定した場合に発 生します。
[EXCEPTION] ArgumentError:
n に負の数を指定した場合に発生します。

[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 で割った余りを返します。

[PARAM] n:
self を割る数を指定します。
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 に従って丸め操作を実行します。

[PARAM] n:
小数点以下の桁数を整数で指定します。
[PARAM] b:
丸め処理の方式として、BigDecimal.mode の第 1 引数と同じ 値を指定します。
[EXCEPTION] TypeError:
n に Fixnum 以外のオブジェクトを指定した場合に発 生します。

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.235
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 -> 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 の平方根ではありません) をニュートン法で 計算します。

[PARAM] n:
有効桁数を整数で指定します。
[EXCEPTION] TypeError:
n に Fixnum 以外のオブジェクトを指定した場合に発 生します。
[EXCEPTION] ArgumentError:
n に負の数を指定した場合に発生します。
sub(other, n) -> BigDecimal[permalink][rdoc]

差を計算します。

self - other を最大で n 桁まで計算します。計算結果の精度が n より大きい ときは BigDecimal.mode で指定された方法で丸められます。

[PARAM] other:
self から引く数を指定します。
[PARAM] n:
有効桁数を整数で指定します。0 を指定した場合は BigDecimal#- と同じ値を返します。
[EXCEPTION] TypeError:
n に Fixnum 以外のオブジェクトを指定した場合に発 生します。
[EXCEPTION] ArgumentError:
n に負の数を指定した場合に発生します。

[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 の小数点以下を切り捨てて整数に変換します。

[EXCEPTION] FloatDomainError:
self が無限大や NaN であった場合に発生します。
to_r -> Rational[permalink][rdoc]

self を Rational オブジェクトに変換します。

to_s -> String[permalink][rdoc]
to_s(n) -> String

self を文字列に変換します (デフォルトは "0.xxxxxEn" の形になります)。

[PARAM] n:
出力の形式を Fixnum または String で指定します。
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

小数点以下の数を切り捨てて整数にします。

[PARAM] n:
小数点以下の桁数を整数で指定します。
[EXCEPTION] TypeError:
n に Fixnum 以外のオブジェクトを指定した場合に発 生します。

以下のように引数を与えて、小数点以下 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 引数に指定します。

INFINITY -> BigDecimal[permalink][rdoc]

正の無限大を表す BigDecimal オブジェクトを返します。

NAN -> BigDecimal[permalink][rdoc]

NaN を表す BigDecimal オブジェクトを返します。

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 の値を返します。