对于以下代码
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时,它输出“通过”,这表示等级已舍入到最高整数?
答案 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
此外,Decimal
与Double
不同,不会将49.5
的输入转换为49.4999999999999999
之类的东西。