我需要检查demical是0到49.99还是50到99.99或100到199.99或大于200.我试图用select case执行此操作,但我不确定语法。请帮忙!
答案 0 :(得分:23)
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 :(得分: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的值在哪里?因为你说的是49-99之间的0-49.99然后是50-99.99,它会去哪里?在上面的示例中,它将包含在其中一个选项中,因此它的值介于0到49.99之间,值介于49.99和99.99之间等等。
答案 2 :(得分:5)
我怀疑你是否已经将这个问题设定为准确地说出你的意思。你真的希望第一组包含只是 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 属于第二组,这似乎违反直觉。选择两个小数位作为截止点是任意的。
'&lt; ='运算符不是这里的方式;使用'&lt;'操作;它更有意义:
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
答案 3 :(得分:3)
AlbertEin正在研究某些事情,但要像VB.Net那样进行整数除法,你必须这样写:
Dim range as Integer
range = someInteger \ 50
注意向后分割符号。从那里你可以Select Case range
。
但实际上,jvanderh的答案大多表达了你想要做的事情,因为它允许在将来轻松添加不会破坏50的倍数的案例,并且不需要未来的维护者来跟踪数学或知道关于\ operator。
答案 4 :(得分: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 :(得分:1)
为什么不尝试if / then / else?它们是等价的,我不确定VBasic中的case语句是否可以处理非整数值。
答案 6 :(得分: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
答案 7 :(得分:0)
select p.player_id,p.name,coalesce(sum(s.score),0)
from player p
left join stats s on p.player_id = s.player_id and s.year=2017
group by p.player_id,p.name
答案 8 :(得分:0)
我遇到了这个问题,但是这些回答仍然允许太多事情落入空白。
'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
语句仅跟随第一个真实的情况,因此即使后续的情况也可能是正确的,如果被较早的情况捕获,它们也会被绕过。