Вопрос по vb.net – выберите регистр, чтобы проверить диапазон десятичного числа

5

Мне нужно проверить, является ли demical от 0 до 49,99 или от 50 до 99,99 или от 100 до 199,99 или больше 200. Я пытаюсь сделать это в случае выбора, но я не уверен в синтаксисе. пожалуйста помоги!

Это целое число или число с плавающей точкой? Я спрашиваю из-за .99 jvanderh
Вы заинтересованы в отправке в другие значения между 49,99 и 50? Я не совсем понятен по вашему вопросу. jvanderh
Десятичный, извините !!!!!!!! l--''''''---------''''''''''''

Ваш Ответ

9   ответов
1

и я не уверен, что оператор case в VBasic может обрабатывать нецелые значения.

if / then / else может быть скомпилирован иначе, чем оператор выбора case. Многие компиляторы оптимизируют оператор выбора регистра.
Я верю, что то же самое относится и к .NET schnaader.
дело быстрее чем тонны if / elseif / elseif / else
Но, по крайней мере, для старых базовых языков и Visual Basic, select..case НАМНОГО быстрее, чем если бы, не знал, как это для 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

.99, а затем 50-99.99, что-нибудь между 49.99 и 50, куда это идет? В моем примере выше он будет включен в одну из опций, поэтому это значения от 0 до 49,99, значения от 49,99 до 99,99 и т. Д. И т. Д.

Ударь меня в этом - это проявилось, пока я еще сочинял;)
Будет ли это лучше или нет, зависит от предпосылки вопроса, который не ясен. Если вы хотите игнорировать значения от 49,99 до 50, значит, вы правы. Вы можете скопировать мой и добавить его в свой вариант с этим разъяснением.
Это повторяющийся ответ, полученный в результате ответа, который я написал во время написания. Пожалуйста, удалите.
хех, я сочинил свой ответ и увидел это. Невероятно, как быстро появляются ответы. У нас нарушено зрение, хотя у нас нет возможности видеть магические вещи, появляющиеся на странице через AJAX.
Я думаю, что ваш ответ лучше моего, так как мой помечен как принятый, вы позволяете мне поставить свой в мой?
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
VB.Net по умолчанию не выполняет целочисленное деление: оно округляется.
1

я использую #, чтобы явно указать, что значения имеют тип «двойной».

   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» а не "#"
5

что вы сформулировали этот вопрос, чтобы точно сказать, что вы имеете в виду. Вы действительно хотите, чтобы первая группа включала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
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

но эти ответы все еще позволяют слишком многим вещам упасть в промежутках.

'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 утверждение следует только за первым истинным случаем, поэтому, хотя последующие случаи также могут быть истинными, они будут обойдены, если будут обнаружены более ранним случаем.

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

другой способ сделать это:Отсюда

    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? l--''''''---------''''''''''''
Смотрите ответ jvanderh для чего-то, что еще ближе к вашему вопросу.
Case True отстой, вы можете просто написатьIf ElseIf конструируй тогда, как любой нормальный программист: P
включать что-нибудь между 1 и 2
3

но для целочисленного деления в VB.Net вы должны написать это так:

Dim range as Integer
range = someInteger \ 50

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

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

Похожие вопросы