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

singleton method BigDecimal.mode

mode(s) -> Integer | nil[permalink][rdoc]
mode(s, v) -> Integer | 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)やゼロによる除算になったときの処理を定義することができます。

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_INFINITYBigDecimal::EXCEPTION_OVERFLOWBigDecimal::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 といったインスタンスメソッドを使用して下さい。