2009-06-17 31 views
4

我需要检查是否从0到49.99或50到99.99或100到199.99或大于200.我试图用select case来做到这一点,但我不是确定的语法。请帮忙!select case来检查十进制数的范围

+1

它是整数或浮点数?请问因为.99 – jvanderh 2009-06-17 22:50:20

+0

小数,对不起!!!!!!!! – 2009-06-17 22:50:59

+0

你有兴趣发送49.99到50之间的其他值吗?根据你的问题,我不清楚。 – jvanderh 2009-06-17 23:04:11

回答

21
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 

其他做法:From here

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

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

+0

if/then/else可以与select case语句不同地进行编译。许多编译器优化了select case语句。 – user109878 2009-06-17 22:53:05

+0

但至少对于旧的BASIC语言和Visual Basic来说,select ..case比if要快得多,不知道它是如何用于VB.NET的。 – schnaader 2009-06-17 22:53:26

+0

case比if/elseif/elseif/else – Fredou 2009-06-17 22:59:11

2
Dim range as Integer 
range = someInteger/50 
'So, if range = 0 is 0-49.99, if it's 1 it's 50 to 99.99, etc 
5
Dim value As Double = 133.5 
     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 

哪里值49.992坠入你的问题?既然你说的是0-49.99,然后是50-99.99,那么49.99到50之间的任何东西都去哪里?在我上面的例子中,它将包含在其中一个选项中,因此它的值在0到49.99之间,数值在49.99到99.99之间等等等等。

3

AlbertEin是一些东西,但要做像VB那样的整数分割.Net你必须这样写:

Dim range as Integer 
range = someInteger \ 50 

注意向后的除法符号。从那里你可以Select Case range

但是真的,jvanderh的回答最能表达你想要做什么,因为它允许在未来不会打破50的倍数并且不需要将来的维护者遵循数学或了解\运营商。

1

这就是我要做的事情,我使用#来显式声明值为“double”类型。

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 
4

我有这样的疑问,你已经构思了这个问题,以确切地说出你的意思。你真的想要第一组包括只是 0到49.99?或者你是否真的认为0最多但不包括50,并且你只是希望你的输入有2位小数或更少?如果通过五要组数字,说出来的话很奇怪写:

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这里属于第二组,这似乎有悖常理。选取两位小数作为截止点是任意的。

'< ='运算符不是去这里的路;使用'<'操作符;这让很多更有意义:

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