Vb.net 选择大小写以检查十进制数的范围

Vb.net 选择大小写以检查十进制数的范围,vb.net,Vb.net,我需要检查一个数值是否为0到49.99或50到99.99或100到199.99或大于200。我试图用selectcase来实现这一点,但我不确定语法。请帮忙 你为什么不试试if/then/else?它们是等价的,我不确定VBasic中的case语句是否可以处理非整数值 Select Case aa Case 1 To 1.49 MsgBox(1) Case 1.5 To 2 MsgBox(2)

我需要检查一个数值是否为0到49.99或50到99.99或100到199.99或大于200。我试图用selectcase来实现这一点,但我不确定语法。请帮忙

你为什么不试试if/then/else?它们是等价的,我不确定VBasic中的case语句是否可以处理非整数值

    Select Case aa
        Case 1 To 1.49
            MsgBox(1)
        Case 1.5 To 2
            MsgBox(2)
        Case Else
            MsgBox("was lower than 1 or higher than 2 or between 1.49 and 1.5")
    End Select
下面的内容将用于其他情况

   Dim aa As Double = 1.499
下面将进入案例1至1.49

   Dim aa As Double = 1.4
下面将进入案例1.5至2

   Dim aa As Double = 1.78
其他方法:

也许这也是:

    Select Case true
        Case (value >= 0 andalso value <= 49.99)
            Debug.WriteLine("first group")
        Case (value >= 50 andalso value <= 99.99)
            Debug.WriteLine("second group")
        Case (value >= 100 andalso value <= 199.99)
            Debug.WriteLine("third group")
        Case Else
            Debug.WriteLine("fourth group")
    End Select

您的问题中49.992的值在哪里?既然你说的是0-49.99,然后是50-99.99,那么49.99和50之间的任何东西,它去哪里了?在我上面的示例中,它将包含在一个选项中,因此它的值介于0和49.99之间,值介于49.99和99.99之间,等等。

AlbertEin位于某个对象上,但要在VB.Net中进行整数除法,您必须这样编写:

Dim range as Integer
range = someInteger \ 50
请注意向后分割符号。您可以从中选择案例范围


但实际上,jvanderh的答案最能表达您想要做的事情,因为它允许在将来轻松添加案例,这些案例不会在50的倍数上中断,也不需要未来的维护人员遵循数学或了解\运算符。

这就是我要做的,我使用

   Dim input As Double = 2.99

    Select Case input
        Case 0.0# To 49.99#
            Response.Write("Between 0 to 49.99")
        Case 50.0# To 99.99#
            Response.Write("Between 50 and 99.99")
        Case Else
            Response.Write("The value did not fall into a range.")
    End Select

我怀疑你提出这个问题的目的是想说清楚你的意思。您真的希望第一组仅包含0到49.99吗?或者你的意思是0到50,但不包括50,你只是希望你的输入有2位或更少的小数位?比如说,如果你想把数字按50分进行分组,那么写下以下内容是非常奇怪的:

Select Case value
    Case Is <= 49.99
        Debug.WriteLine("49.99 or less")
    Case Is <= 99.99
        Debug.WriteLine("greater than 49.99, 99.99 or less")
    ' ... and so on '
End Select
这里的数字49.995属于第二组,这似乎违反直觉。选择两位小数作为截止点是任意的


我遇到了这个问题,但这些回答仍然允许太多的东西落在空白处

'In this example, a value of 49.991 - 49.999* will fall in the 99.99 category, where I expect it is intended for the 49.99 category
Select Case value
    Case Is <= 49.99
        Debug.WriteLine("first group")
    Case Is <= 99.99
        Debug.WriteLine("second group")
    Case Is <= 199.99
        Debug.WriteLine("third group")
    Case Else
        Debug.WriteLine("fourth group")
End Select
Select Case value
    Case Is >= 200
        Debug.WriteLine("fourth group")
    Case Is >= 100
        Debug.WriteLine("third group")
    Case Is >= 50
        '49.9999* will always fall in this group irrespective of number of decimal places
        Debug.WriteLine("second group")
    Case Else
        Debug.WriteLine("first group")
End Select


Select Case语句只跟在第一个true Case之后,因此即使后续的Case也可能是true,如果被较早的Case捕获,它们也将被忽略。

是integer还是float?我之所以这样问是因为.99。您是否有兴趣将49.99和50之间的值发送给其他人??根据你的问题,我不清楚。当你说1到2时,它包括1和2吗?包括1到2之间的任何东西。关于更接近你问题的东西,请参见jvanderh的答案。人们对选择正确的情况有什么看法?正确的情况很糟糕,您只需编写一个If-ElseIf构造,然后就像每个普通程序员所做的那样:Pif/then/else的编译方式可以不同于select-case语句。许多编译器优化了select case语句。但至少对于旧的BASIC语言和Visual BASIC,select..case比if快得多,不知道VB的情况如何。NETcase比数吨的if/elseif/elseif/elseI快。我相信同样的情况仍然适用于.NET schnaader.VB.NET默认情况下不进行整数除法:它会进行取整。快来吧-这是在我还在创作时出现的;我认为你的答案比我的好,既然我的答案被标记为已接受,你允许我将你的答案放入我的答案中吗?是否更好取决于问题的前提,而这个前提并不清楚。如果目的是忽略49.99和50之间的值,则您的值是正确的。你可以复制我的答案,并将其添加到你的答案中,作为澄清的选项。令人难以置信的是,答案出现得如此之快。虽然美国视力受损,但我们无法通过AJAX看到页面上神奇的东西。这是一个重复的答案,因为我在写作时收到了一个答案,请删除。我想你的意思是“d”,而不是只放代码。请解释你是如何得到答案的。
Select Case value
    Case Is <= 49.99
        Debug.WriteLine("49.99 or less")
    Case Is <= 99.99
        Debug.WriteLine("greater than 49.99, 99.99 or less")
    ' ... and so on '
End Select
Select Case value
    Case Is < 50
        Debug.WriteLine("less than fifty")
    Case Is < 100
        Debug.WriteLine("fifty or greater, less than 100")
    ' ... and so on '
End Select
Structure employee
    Dim percent As Decimal
    Dim dayname As DayOfWeek
End Structure

Dim emp As employee

 emp.percent = CDec(45.5)
 emp.dayname = DayOfWeek.Friday

Select Case True

    Case (emp.percent >= 0 And emp.percent <= 49.99 
                   And emp.dayname = Now.DayOfWeek)

        MsgBox("Employee percentage   " & emp.percent 
                & "Name of the day  " & Now.DayOfWeek.ToString)

End Select
'In this example, a value of 49.991 - 49.999* will fall in the 99.99 category, where I expect it is intended for the 49.99 category
Select Case value
    Case Is <= 49.99
        Debug.WriteLine("first group")
    Case Is <= 99.99
        Debug.WriteLine("second group")
    Case Is <= 199.99
        Debug.WriteLine("third group")
    Case Else
        Debug.WriteLine("fourth group")
End Select
Select Case value
    Case Is >= 200
        Debug.WriteLine("fourth group")
    Case Is >= 100
        Debug.WriteLine("third group")
    Case Is >= 50
        '49.9999* will always fall in this group irrespective of number of decimal places
        Debug.WriteLine("second group")
    Case Else
        Debug.WriteLine("first group")
End Select