Vb.net 搞不懂为什么数字之间的比较结果为真

Vb.net 搞不懂为什么数字之间的比较结果为真,vb.net,if-statement,Vb.net,If Statement,我正在使用以下代码检查我的健康状况是否超过允许的最大健康状况: Public Sub healthCheck() If Player.CurrentHealth > Player.MaxHealth Then MsgBox(Player.CurrentHealth & "&" & Player.MaxHealth) Player.CurrentHealth = Player.MaxHealth Msg

我正在使用以下代码检查我的健康状况是否超过允许的最大健康状况:

    Public Sub healthCheck()

    If Player.CurrentHealth > Player.MaxHealth Then
        MsgBox(Player.CurrentHealth & "&" & Player.MaxHealth)
        Player.CurrentHealth = Player.MaxHealth
        MsgBox(Player.CurrentHealth & "&" & Player.MaxHealth)

    ElseIf (0 > Player.CurrentHealth) Then

        Player.CurrentHealth = 0

    End If

End Sub
我添加MessageBox是为了调试,它们输出以下字符串:

第一个消息框=8和20

第二个消息框=20和20

如果第一个告诉我

currenthealth = 8 

为什么它甚至进入了if建设? 据我所知,8并不比20高

编辑:


这似乎只发生在10马力以下!因此,在10/20时,它不输入if,只跳过if构造,但在9/20时,它会重置为20/20(好像比较结果为真)

评论中回答了这个问题:


显示currenthealth和maxhealth的声明。如果它们是字符串,则可以解释您在此处看到的内容


哦,亲爱的上帝,你是对的!我为忽略了这一点而感到羞愧


您的运行状况变量可能是字符串:

MsgBox("8" > "20") // Outputs True
纠正

Dim currentHealth As Int32 = Int32.Parse(Player.CurrentHealth)
Dim maxHealth As Int32 = Int32.Parse(Player.MaxHealth)

If currentHealth > maxHealth Then
    MsgBox(currentHealth & "&" & maxHealth)
    Player.CurrentHealth = PLayer.MaxHealth
    currentHealth = maxHealth
    MsgBox(currentHealth & "&" & maxHealth)

ElseIf (0 > currentHealth) Then

    Player.CurrentHealth = 0

End If

显示currenthealth和maxhealth的声明。如果它们是字符串,那么可以解释您在这里看到的内容。您确定CurrentHealth和MaxHealth是数字而不是字符串吗?哦,亲爱的上帝,您是对的!我为忽略了这一点而感到羞愧..将
选项严格切换到
,以防止将来感到羞耻
Dim currentHealth As Int32 = Int32.Parse(Player.CurrentHealth)
Dim maxHealth As Int32 = Int32.Parse(Player.MaxHealth)

If currentHealth > maxHealth Then
    MsgBox(currentHealth & "&" & maxHealth)
    Player.CurrentHealth = PLayer.MaxHealth
    currentHealth = maxHealth
    MsgBox(currentHealth & "&" & maxHealth)

ElseIf (0 > currentHealth) Then

    Player.CurrentHealth = 0

End If