Question

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.

Was it helpful?

Solution

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))

OTHER TIPS

You can use:

Math.Round(value, 2, MidpointRounding.AwayFromZero)

For details, see the overload of Math.Round which accepts a MidpointRounding.

Use

Math.Round(value, 2, System.MidpointRounding.AwayFromZero)

Check out the MidpointRounding parameter:

Math.Round(43.565, 2, MidpointRounding.AwayFromZero)

Should give you 43.57

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top