문제

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.

도움이 되었습니까?

해결책

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

다른 팁

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top