0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

BigDecimal型のデフォルト四捨五入を変更する方法

Last updated at Posted at 2023-07-24

書き方

書き方は単純なのですが、調べても全然出てこなかった!!

models/Hoge.rb
class Hoge < ApplicationRecord
  BigDecimal.mode(BigDecimal::ROUND_MODE, BigDecimal::ROUND_DOWN)

  belongs_to :foobar
end

例外処理

計算結果が非数(NaN)やゼロによる除算になったときの処理を定義することができます。

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)
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)

BigDecimal::EXCEPTION_NaN は結果が NaN になったときの指定です。
BigDecimal::EXCEPTION_INFINITY は結果が無限大(±Infinity)になったときの指定です。
BigDecimal::EXCEPTION_UNDERFLOW は指数部がアンダーフローするときの指定です。
BigDecimal::EXCEPTION_OVERFLOW は指数部がオーバーフローするときの指定です。
BigDecimal::EXCEPTION_ZERODIVIDE はゼロによる割り算を実行したときの指定です。
BigDecimal::EXCEPTION_ALL は、可能な全てに対して一括して設定するときに使用します。
flag が true のときは、指定した状態になったときに例外を発行するようになります。 flag が false(デフォルト)なら、例外は発行されません。計算結果は以下のようになります。

BigDecimal::EXCEPTION_NaN のとき、非数(NaN)
BigDecimal::EXCEPTION_INFINITY のとき、無限(+ or -Infinity)
BigDecimal::EXCEPTION_UNDERFLOW のとき、ゼロ
BigDecimal::EXCEPTION_OVERFLOW のとき、+Infinity か -Infinity
BigDecimal::EXCEPTION_ZERODIVIDE のとき、+Infinity か -Infinity
BigDecimal::EXCEPTION_INFINITY、BigDecimal::EXCEPTION_OVERFLOW、 BigDecimal::EXCEPTION_ZERODIVIDE は今のところ同じです。戻り値は、設定後の値です。「値」の意味は、例えば BigDecimal::EXCEPTION_NaN と「値」の & が ゼロ以外ならば BigDecimal::EXCEPTION_NaNが設定されているという意味です。

丸め処理指定

計算途中の丸め操作の指定ができます。

BigDecimal::ROUND_UP 全て切り上げます。
BigDecimal::ROUND_DOWN 全て切り捨てます(truncate)。
BigDecimal::ROUND_HALF_UP 四捨五入します(デフォルト)。
BigDecimal::ROUND_HALF_DOWN 五捨六入します。
BigDecimal::ROUND_HALF_EVEN 四捨六入します。5の時は上位1桁が奇数の時のみ繰り上げます(Banker's rounding)。
BigDecimal::ROUND_CEILING 数値の大きい方に繰り上げます(ceil)。
BigDecimal::ROUND_FLOOR 数値の小さい方に繰り下げます(floor)。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?