舍入值为5或9

时间:2017-03-21 08:25:49

标签: vb.net

我必须将一些十进制值格式化为特定逻辑。我想将输入值总是舍入到5或9.我怎样才能实现最简单的方法,是否已经有任何功能?下面找到我想要达到的示例。左边是一些输入值,右边是我想要实现的输出。有没有简单的方法呢?

Input       Formatted
------      ----------
614,46      = 615,00
614,57      = 615,00
615,01      = 619,00
616,57      = 619,00
91,11       = 95,00 
96,11       = 99,00 
89,25       = 95,00 

2 个答案:

答案 0 :(得分:2)

您的案例没有任何内容,但您可以自己轻松实现它:

Public Sub Main()
    Console.WriteLine("{0:N2}", myFlor(614.46))
    Console.WriteLine("{0:N2}", myFlor(614.57))
    Console.WriteLine("{0:N2}", myFlor(615.01))
    Console.WriteLine("{0:N2}", myFlor(616.57))
    Console.WriteLine("{0:N2}", myFlor(91.11 ))
    Console.WriteLine("{0:N2}", myFlor(96.11 ))
    Console.WriteLine("{0:N2}", myFlor(89.25 ))
End Sub

Function myFlor(ByVal value As Double) As Double
    Dim base as Integer
    base =  Math.Truncate(value / 10) *10
    If value - base > 9
        ' Handle 9.01 -9.99 case
        Return base + 15
    ElseIf value - base > 5
        Return base + 9
    Else
        Return base + 5
    End If
End Function

答案 1 :(得分:1)

如果我理解正确,您需要使用Ceiling方法返回大于或等于指定数字的最小整数,然后将此整数舍入到最接近的5或9。

如果不编写自己的函数,我认为你不能获得这种行为:

Private Function intRoundTo5Or9(ByVal dblNumber As Double) As Integer

    Dim intLastDigit As Integer = CInt(Math.Ceiling(dblNumber).ToString().Substring(Math.Ceiling(dblNumber).ToString().Length - 1, 1))

    If intLastDigit <= 5 Then
        Return Math.Ceiling(dblNumber) + 5 - intLastDigit
    Else
        Return Math.Ceiling(dblNumber) + 9 - intLastDigit
    End If

End Function