2008/10/20(Mon) 15:12:14 編集(投稿者)
Console.WriteLine(ToHalfAdjust(555.555R, 2))
Console.WriteLine(Math.Round(555.555R, 2, MidpointRounding.AwayFromZero))
↑のコードを、MSILで覗いてみると、
IL_0001: ldc.r8 555.55499999999995
IL_000a: ldc.i4.2
IL_000b: call float64 WindowsApplication1.Program::ToHalfAdjust(float64,
int32)
IL_0010: call void [mscorlib]System.Console::WriteLine(float64)
IL_0016: ldc.r8 555.55499999999995
IL_001f: ldc.i4.2
IL_0020: ldc.i4.1
IL_0021: call float64 [mscorlib]System.Math::Round(float64,
int32,
valuetype [mscorlib]System.MidpointRounding)
IL_0026: call void [mscorlib]System.Console::WriteLine(float64)
なんですよね。555.555 という値では持っていないんですよ。
# MSILで見ることで、1つ前の書き込みの大ポカに気がついたのは余談ですが