丸め処理と割り算
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