使用Math.Round舍入问题

Joh*_*ohn 3 c# vb.net math bankers-rounding rounding

Module Module1
Public Sub Main()
    Dim values() As Double = {43.523, 12.65, 43.565}
    For Each value As Double In values
        Console.WriteLine("{0} --> {1}", value, Math.Round(value, 2))
    Next
    Console.ReadLine()
End Sub
End Module
Run Code Online (Sandbox Code Playgroud)

上面的代码结果为

  • 43.523 - > 43.52

  • 12.65 - > 12.65

  • 43.565 - > 43.56

我需要43.565 - > 43.57而不是43.565 - > 43.56.但我仍然需要其他43.523 - > 43.52和12.65 - > 12.65四舍五入.

Jon*_*eet 7

首先,如果您关注精确的十进制值,则应考虑使用Decimal而不是Double.特别是,43.565并不能完全代表Double.

但是,如果要指定"中点"的行为(即可以合理地向上或向下舍入的位置),请使用MidpointRounding参数重载:

Console.WriteLine("{0} --> {1}", value, _
                  Math.Round(value, 2, MidpointRounding.AwayFromZero))
Run Code Online (Sandbox Code Playgroud)