【问题标题】:VB.NET - Getting a NaN result, can't figure out whyVB.NET - 得到一个 NaN 结果,不知道为什么
【发布时间】:2018-08-07 18:20:25
【问题描述】:

我正在尝试编写一个简单的 GPA 计算器,用户可以在其中输入组合框(A、B、C、D、F)和课程学分中项目的成绩,计算将输出到一个文本框。但是,我一直在文本框中得到一个 NaN 结果,我一生都无法理解为什么。我只有一点编程经验,如果有任何帮助,我将不胜感激!

    Public Class Form1

    Public points As Double, hours As Integer

    Private Sub btnRecord_Click(sender As Object, e As EventArgs) Handles btnRecord.Click

        Dim gpaPoints As Double
        Dim creditHours As Integer
        Dim grade As String

        If cmbGrades.SelectedIndex < 0 Then
            MsgBox("Please select a grade.")
            Exit Sub
        ElseIf txtHours.Text = "" Then
            MsgBox("Please enter credit hours.")
        Else
            grade = cmbGrades.SelectedItem
            creditHours = CInt(txtHours.Text)
            gpaPoints = CalcGPA(grade, creditHours)
            points += gpaPoints
            hours += creditHours
            ClearList()
        End If

    End Sub

    Public Sub ClearList()
        cmbGrades.SelectedIndex = -1
        cmbGrades.Text = "Select a grade"
        txtHours.Text = ""
    End Sub

    Public Function CalcGPA(grade As String, creditHours As Integer)

        Dim gpaPoints As Double

        Select Case (grade)
            Case "A"
                gpaPoints = 4
            Case "B"
                gpaPoints = 3
            Case "C"
                gpaPoints = 2
            Case "D"
                gpaPoints = 1
            Case Else
                gpaPoints = 0

        End Select

        Return gpaPoints

    End Function

    Private Sub btnGpa_Click(sender As Object, e As EventArgs) Handles btnGpa.Click

        Dim calcGpa As Double = points / hours

        txtGpa.Text = FormatNumber(calcGpa, 2)

    End Sub

End Class

我基本上有记录按钮,它可以很好地清除列表并允许某人进入二年级,但计算按钮不起作用,我无法弄清楚。我真诚地感谢任何帮助。

【问题讨论】:

  • 请注意:您的creditHours 参数未使用。
  • 为了帮助您调试:任何使用 NaN 的计算都会给出 NaN,而且 0/0 也会给出 NaN 用于浮点数计算,例如您的案例点数/小时数)
  • 感谢您的快速回复@pac0 - 您能否顺便详细说明一下?即使我有 hours += creditHours 和将文本框转换为整数的变量,它是否被视为未使用?
  • 这可能不是您的问题的原因,只是一个旁注。但无论如何,您确实在 btn_click 处理程序中计算 creditHours 的一些值,但是当您调用 gpaPoints = CalcGPA(grade, creditHours) 时,似乎您在函数 CalcGPA 中根本不使用 creditHours 。
  • 你应该设置 Option Strict On

标签: vb.net math nan


【解决方案1】:

作为一般经验法则,如果您得到 'NaN',您可以检查以下内容:

  • 在某处使用任何 NaN 的计算都会给出 NaN
  • 如果是浮点数,0 / 0 除法将给出 NaN。您有一个浮点除法,因此您可以在此处检查计算时您的值是否不为零。

【讨论】:

    【解决方案2】:
     Private Sub btnGpa_Click(sender As Object, e As EventArgs) Handles btnGpa.Click
    
       'Dim calcGpa As Double = points / hours '(**did you assign values here?** if not remove this)
       dim answer as double = 0
    
       CalcGPA(cmbGrades.SelectedValue, txtHours.Text )
        txtGpa.Text = FormatNumber(answer, 2)
    
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      • 2019-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多