Мне нужно проверить, является ли demical от 0 до 49.99 или от 50 до 99.99 или от 100 до 199.99 или больше 200. Я пытаюсь сделать это с помощью select case, но я не уверен в синтаксисе. пожалуйста помоги!select case to check range of десятичное число
ответ
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 до 2, включает ли он 1 и 2? –
включает в себя что-нибудь между 1 и 2 – Fredou
См. Ответ jvanderh для чего-то, что еще ближе к вашему вопросу. –
Почему бы вам не попробовать, если/then/else? Они эквивалентны, и я не уверен, может ли оператор case в VBasic обрабатывать нецелые значения.
, если/then/else может быть скомпилирован иначе, чем оператор select case. Многие компиляторы оптимизируют оператор case case. – user109878
Но, по крайней мере, для старых языков BASIC и Visual Basic, select..case намного быстрее, чем если бы, не знаю, как это делается для VB.NET. – schnaader
случай быстрее, чем тонны if/elseif/elseif/else – Fredou
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
VB.Net по умолчанию не выполняет целочисленное деление: оно округляется. –
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 и т. Д.
Ударьте меня в это - это появилось, пока я еще сочинялся;) –
Я думаю, что ваш ответ лучше моего, так как мой отмечен как принятый, разрешите ли вы мне вставить его? – Fredou
Если это лучше или не зависит от предпосылки непонятного вопроса. Если целью является игнорировать значения между 49.99 и 50, тогда ваш будет правильным. Вы можете скопировать мою и добавить ее к себе в качестве опции с этим разъяснением. – jvanderh
AlbertEin на что-то, .Net вы должны написать это следующим образом:
Dim range as Integer
range = someInteger \ 50
Обратите внимание на символ обратного деления. Оттуда вы можете Select Case range
.
Но на самом деле ответ jvanderh наиболее выражает то, что вы хотите сделать, поскольку он позволяет легко добавлять случаи в будущем, которые не разбиваются на несколько из 50, и не требуют, чтобы будущие сопровождающие следили за математикой или знайте о \ operator.
Вот как бы я это сделал, я использую #, чтобы явно указывать значения типа «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
Я думаю, вы имеете в виду «d», а не «#» –
У меня есть сомнения, что вы задали этот вопрос, чтобы точно сказать, что вы имеете в виду. Вы действительно хотите, чтобы первая группа охватывала только от 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
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
Не ставьте код только, пожалуйста, объясните, как вы получили ответ. – Lakmi
ли это целое или плавать? Я спрашиваю из-за .99 – jvanderh
Десятичный, извините !!!!!!!! –
Вы заинтересованы в отправке в другие значения между 49.99 и 50 ?? Я не понимаю, на ваш вопрос. – jvanderh