Проблема округления с использованием 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
Приведенный выше код выглядит как
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 были округлены как есть.
4 ответа
Во-первых, если вас интересуют точные десятичные значения, вы должны рассмотреть возможность использования Decimal
вместо Double
, В частности, 43.565 не совсем представимо как Double
начать с.
Однако, если вы хотите указать поведение для "средних точек" (т. Е. Там, где оно может разумно округляться вверх или вниз), используйте перегрузку с MidpointRounding
параметр:
Console.WriteLine("{0} --> {1}", value, _
Math.Round(value, 2, MidpointRounding.AwayFromZero))
Ты можешь использовать:
Math.Round(value, 2, MidpointRounding.AwayFromZero)
Для получения дополнительной информации см. Перегрузку Math.Round, которая принимает MidpointRounding
,
Проверьте параметр MidpointRounding:
Math.Round(43.565, 2, MidpointRounding.AwayFromZero)
Должен дать вам 43,57
Использование
Math.Round(value, 2, System.MidpointRounding.AwayFromZero)