2009-06-17 3 views
4

Мне нужно проверить, является ли demical от 0 до 49.99 или от 50 до 99.99 или от 100 до 199.99 или больше 200. Я пытаюсь сделать это с помощью select case, но я не уверен в синтаксисе. пожалуйста помоги!select case to check range of десятичное число

+1

ли это целое или плавать? Я спрашиваю из-за .99 – jvanderh

+0

Десятичный, извините !!!!!!!! –

+0

Вы заинтересованы в отправке в другие значения между 49.99 и 50 ?? Я не понимаю, на ваш вопрос. – jvanderh

ответ

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

, когда вы говорите от 1 до 2, включает ли он 1 и 2? –

+0

включает в себя что-нибудь между 1 и 2 – Fredou

+0

См. Ответ jvanderh для чего-то, что еще ближе к вашему вопросу. –

1

Почему бы вам не попробовать, если/then/else? Они эквивалентны, и я не уверен, может ли оператор case в VBasic обрабатывать нецелые значения.

+0

, если/then/else может быть скомпилирован иначе, чем оператор select case. Многие компиляторы оптимизируют оператор case case. – user109878

+0

Но, по крайней мере, для старых языков BASIC и Visual Basic, select..case намного быстрее, чем если бы, не знаю, как это делается для VB.NET. – schnaader

+0

случай быстрее, чем тонны if/elseif/elseif/else – Fredou

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

VB.Net по умолчанию не выполняет целочисленное деление: оно округляется. –

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 и т. Д.

+0

Ударьте меня в это - это появилось, пока я еще сочинялся;) –

+0

Я думаю, что ваш ответ лучше моего, так как мой отмечен как принятый, разрешите ли вы мне вставить его? – Fredou

+0

Если это лучше или не зависит от предпосылки непонятного вопроса. Если целью является игнорировать значения между 49.99 и 50, тогда ваш будет правильным. Вы можете скопировать мою и добавить ее к себе в качестве опции с этим разъяснением. – jvanderh

3

AlbertEin на что-то, .Net вы должны написать это следующим образом:

Dim range as Integer 
range = someInteger \ 50 

Обратите внимание на символ обратного деления. Оттуда вы можете Select Case range.

Но на самом деле ответ jvanderh наиболее выражает то, что вы хотите сделать, поскольку он позволяет легко добавлять случаи в будущем, которые не разбиваются на несколько из 50, и не требуют, чтобы будущие сопровождающие следили за математикой или знайте о \ operator.

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

Я думаю, вы имеете в виду «d», а не «#» –

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

Не ставьте код только, пожалуйста, объясните, как вы получили ответ. – Lakmi