各メソッドの端数処理の動作を比較すると次のようになります。 0.25刻みの数について、それぞれのメソッドを使って端数処理した場合の結果を並べています。
Truncate・Ceiling・Floor・Roundの各メソッドと丸め・端数処理の結果の違い
Imports System
Class Sample
Shared Sub Main()
Console.WriteLine("{0,6}| {1,12} {2,12} {3,12} {4,16} {5,20}| {0,6}", _
"value", _
"Ceiling", _
"Floor", _
"Truncate", _
"Round+ToEven", _
"Round+AwayFromZero")
Console.WriteLine(New String("-"c, 14 * 7))
For d As Double = 2.75 To -2.75 Step -0.25
Console.WriteLine("{0,6:F2}| {1,12:F2} {2,12:F2} {3,12:F2} {4,16:F2} {5,20:F2}| {0,6:F2}", _
d, _
Math.Ceiling(d), _
Math.Floor(d), _
Math.Truncate(d), _
Math.Round(d, MidpointRounding.ToEven), _
Math.Round(d, MidpointRounding.AwayFromZero))
Next
End Sub
End Class
実行結果
value| Ceiling Floor Truncate Round+ToEven Round+AwayFromZero| value -------------------------------------------------------------------------------------------------- 2.75| 3.00 2.00 2.00 3.00 3.00| 2.75 2.50| 3.00 2.00 2.00 2.00 3.00| 2.50 2.25| 3.00 2.00 2.00 2.00 2.00| 2.25 2.00| 2.00 2.00 2.00 2.00 2.00| 2.00 1.75| 2.00 1.00 1.00 2.00 2.00| 1.75 1.50| 2.00 1.00 1.00 2.00 2.00| 1.50 1.25| 2.00 1.00 1.00 1.00 1.00| 1.25 1.00| 1.00 1.00 1.00 1.00 1.00| 1.00 0.75| 1.00 0.00 0.00 1.00 1.00| 0.75 0.50| 1.00 0.00 0.00 0.00 1.00| 0.50 0.25| 1.00 0.00 0.00 0.00 0.00| 0.25 0.00| 0.00 0.00 0.00 0.00 0.00| 0.00 -0.25| 0.00 -1.00 0.00 0.00 0.00| -0.25 -0.50| 0.00 -1.00 0.00 0.00 -1.00| -0.50 -0.75| 0.00 -1.00 0.00 -1.00 -1.00| -0.75 -1.00| -1.00 -1.00 -1.00 -1.00 -1.00| -1.00 -1.25| -1.00 -2.00 -1.00 -1.00 -1.00| -1.25 -1.50| -1.00 -2.00 -1.00 -2.00 -2.00| -1.50 -1.75| -1.00 -2.00 -1.00 -2.00 -2.00| -1.75 -2.00| -2.00 -2.00 -2.00 -2.00 -2.00| -2.00 -2.25| -2.00 -3.00 -2.00 -2.00 -2.00| -2.25 -2.50| -2.00 -3.00 -2.00 -2.00 -3.00| -2.50 -2.75| -2.00 -3.00 -2.00 -3.00 -3.00| -2.75