使用Math.Round舍入问题

时间:2012-08-30 19:47:05

标签: c# vb.net math rounding bankers-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

以上代码结果为

  • 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 个答案:

答案 0 :(得分:7)

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

但是,如果要指定“中点”的行为(即可以合理地向上或向下舍入的位置),请使用overload with a MidpointRounding parameter

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

答案 1 :(得分:4)

您可以使用:

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

有关详细信息,请参阅接受MidpointRounding。{/ p>的overload of Math.Round

答案 2 :(得分:1)

使用

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

答案 3 :(得分:1)

查看MidpointRounding参数:

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

应该给你43.57

相关问题