Вопрос по vb.net – выберите регистр, чтобы проверить диапазон десятичного числа
Мне нужно проверить, является ли demical от 0 до 49,99 или от 50 до 99,99 или от 100 до 199,99 или больше 200. Я пытаюсь сделать это в случае выбора, но я не уверен в синтаксисе. пожалуйста помоги!
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
.99, а затем 50-99.99, что-нибудь между 49.99 и 50, куда это идет? В моем примере выше он будет включен в одну из опций, поэтому это значения от 0 до 49,99, значения от 49,99 до 99,99 и т. Д. И т. Д.
я использую #, чтобы явно указать, что значения имеют тип «двойной».
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
что вы сформулировали этот вопрос, чтобы точно сказать, что вы имеете в виду. Вы действительно хотите, чтобы первая группа включалаjust От 0 до 49,99? Или вы действительно имеете в виду от 0 до 50, но не считая 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; оператор не путь сюда; использовать "& 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
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
Select 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 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
но для целочисленного деления в VB.Net вы должны написать это так:
Dim range as Integer
range = someInteger \ 50
Обратите внимание на символ обратного деления. Оттуда вы можетеSelect Case range
.
Но на самом деле ответ jvanderh больше всего отражает то, что вы хотите сделать, потому что он позволяет легко добавлять в будущем случаи, которые не разбиваются на кратные 50, и не требуют, чтобы будущие сопровождающие следовали математике или знали о Оператор.