Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Rounding Issue using Math.Round

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

The above code results as

  • 43.523 --> 43.52

  • 12.65 --> 12.65

  • 43.565 --> 43.56

I need 43.565 --> 43.57 and not 43.565 --> 43.56. But i still need the other 43.523 --> 43.52 and 12.65 --> 12.65 rounded as is.

like image 520
John Avatar asked Sep 05 '25 03:09

John


1 Answers

Firstly, if exact decimal values are of concern to you, you should consider using Decimal instead of Double. In particular, 43.565 isn't exactly representable as a Double to start with.

However, if you want to specify the behaviour for "midpoints" (i.e. where it could reasonably round up or down), use the overload with a MidpointRounding parameter:

Console.WriteLine("{0} --> {1}", value, _
                  Math.Round(value, 2, MidpointRounding.AwayFromZero))
like image 170
Jon Skeet Avatar answered Sep 08 '25 22:09

Jon Skeet