丸め処理と割り算

Posted by mkamo on 2008年4月13日

丸め処理と割り算について,ちょくちょく忘れるのでまとめておく.

浮動小数点数から整数への丸め処理は以下のとおり.

処理 結果
intでキャスト 0方向の最も近い整数を返す
Math.Trancate(double) 0方向の最も近い整数部を返す
Math.Ceiling(double) 正の無限大方向の最も近い整数部を返す
Math.Floor(double) 負の無限大方向の最も近い整数部を返す
Math.Round(double)
または
Math.Round(
double,
MidpointRounding.ToEven
)
最も近い整数部を返す.ただし,二つの整数の中間の場合は偶数側の整数部を返す
Math.Round(
double,
MidpointRounding.AwayFromZero
)
最も近い整数部を返す.ただし,二つの整数の中間の場合は0から遠い方の整数部を返す

Math.Round(double)は俗に言う四捨五入ではないことに注意.MidpointRounding.ToEvenのときの丸め処理は0.5を加算・減算するときの対象性のため.(JIS丸めとは?)

あと,割り算でint / intの結果はdouble / doubleの結果をintでキャストしたときと同じ結果になる.浮動小数点数の結果が欲しければ,どちらかのintをfloatかdoubleに明示的にキャストしておく必要がある.

int i = 1, j = 2;
Console.WriteLine(i / j);          // => 0
Console.WriteLine((double) i / j); // => 0.5


コメントを書く




XHTML: 次のタグが使用できます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Please note: 投稿されたコメントが表示されるにはいくらかの時間がかかります.投稿後直ちに表示されませんが投稿ボタンを何度も押さないようお願いします.