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