用于以下代码
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时,它输出"通过",这意味着等级已四舍五入到最高整数?
如果64.5给出"pass",它没有像你说的那样四舍五入到高位,这意味着它将达到64(pass是从50到64,所以这是有意义的(
现在关于舍入,你可以使用Decimal。Round,它将数字、你想要的小数位数(在你的情况下是0小数(和舍入的模式作为参数
你应该使用十进制var,但如果你坚持使用integer,只需将decimal.Round的结果转换为int
不要猜测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
此外,与Double
不同,Decimal
不将49.5
的输入转换为类似于49.4999999999999999
的东西。