在VB.NET中选择大小写

时间:2018-11-30 16:34:31

标签: vb.net

对于以下代码

Dim mark As Integer

mark = InputBox("please enter your grade")
Select Case mark
    Case < 50
        MsgBox("fail")
    Case 50 To 64
        MsgBox("pass")
    Case 65 To 74
        MsgBox("good")
    Case 75 To 84
        MsgBox("very good")
    Case 85 To 1000
        MsgBox("excellent")
End Select

我故意将等级定义为整数。那么,为什么当等级为49.5时,输出失败(这意味着等级已舍入到最低整数)?另一方面,当等级为64.5时,它输出“通过”,这表示等级已舍入到最高整数?

2 个答案:

答案 0 :(得分:0)

如果64.5给出的“通过”没有如您所说的那样四舍五入,则意味着它会升至64(通过从50到64,这是有道理的)

现在可以使用Decimal.Round进行四舍五入,它将数字,所需的小数位数(在您的情况下为0小数)和舍入模式作为参数

您应该使用十进制var,但是如果您坚持使用整数,只需将Decimal.Round的结果转换为int

答案 1 :(得分:0)

不要猜测VB的自动转换在做什么。而是设置Option Strict On并自己执行转换。

Dim input As String = InputBox("please enter your grade")
Dim grade As Decimal
If Decimal.TryParse(input, grade) Then
    ' Now we know that the input is a valid decimal number.

    ' Here we control explicitly how we want to convert it to an Integer:
    Dim mark As Integer = CInt(Math.Round(grade, MidpointRounding.AwayFromZero))

    Select Case mark
        Case < 50
            MsgBox("fail")
        Case 50 To 64
            MsgBox("pass")
        Case 65 To 74
            MsgBox("good")
        Case 75 To 84
            MsgBox("very good")
        Case 85 To 1000
            MsgBox("excellent")
    End Select
End If

此外,DecimalDouble不同,不会将49.5的输入转换为49.4999999999999999之类的东西。