Vb.net 函数问题和错误

Vb.net 函数问题和错误,vb.net,Vb.net,我在学校作业上遇到了麻烦。我必须计算函数中销售税子过程中的小计。子过程工作正常,但我在函数方面遇到了各种各样的问题。调用子过程SubTotal不会返回值,从lblSubtotal获取该值会导致System.FormatException:“输入字符串的格式不正确。”。如有任何提示和建议,将不胜感激,谢谢 代码 直接的问题是标签中的值被格式化为货币,但当您尝试重新解析它时,您没有指定货币。Parse允许您指定如何格式化输入,如果不指定货币,则货币无效。您应该阅读Decimal.Parse之类的内容

我在学校作业上遇到了麻烦。我必须计算函数中销售税子过程中的小计。子过程工作正常,但我在函数方面遇到了各种各样的问题。调用子过程SubTotal不会返回值,从lblSubtotal获取该值会导致System.FormatException:“输入字符串的格式不正确。”。如有任何提示和建议,将不胜感激,谢谢

代码


直接的问题是标签中的值被格式化为货币,但当您尝试重新解析它时,您没有指定货币。Parse允许您指定如何格式化输入,如果不指定货币,则货币无效。您应该阅读Decimal.Parse之类的内容,以了解如何指定允许的格式

但这并不是解决问题的正确方法。问题是,标签用于数据显示,而不是数据存储。没有充分的理由从标签上获取数据。用户无法在标签中输入任何内容,因此如果标签中有数据,那么您必须从某个地方将其放在标签中。如果你需要这些数据,你应该从原始的某个地方获取,而不是从标签上获取


在本例中,decSubtotal变量中有一个十进制值,该值是标签的源。当您需要这些数据时,您应该从同一个变量中获取,而不是从标签中获取。这意味着需要在类级别而不是方法级别声明该变量,即成员而不是局部变量。因为该变量是Decimal类型,所以不需要解析,您只需按原样使用即可。

您的代码不包含subTotal方法:?
Public Class frmMain

Private Sub btnExit_Click(sender As Object, e As EventArgs) Handles btnExit.Click
    Me.Close()
End Sub
Private Sub ClearLables(sender As Object, e As EventArgs) _
    Handles radChocolate.CheckedChanged, radCappuccino.CheckedChanged,
    radFilled.CheckedChanged, radGlazed.CheckedChanged, radNone.CheckedChanged,
    radRegular.CheckedChanged, radSugar.CheckedChanged
    ' Clears labels
    lblSalesTax.Text = String.Empty
    lblSubtotal.Text = String.Empty
    lblTotalDue.Text = String.Empty

End Sub

Public Sub CalculateSubtotal()
    Dim decSubtotal As Decimal = 0

    If radGlazed.Checked Then
        decSubtotal += 1.05
    ElseIf radSugar.Checked Then
        decSubtotal += 1.05
    ElseIf radChocolate.Checked Then
        decSubtotal += 1.25
    ElseIf radFilled.Checked Then
        decSubtotal += 1.5
    End If

    If radNone.Checked Then
        decSubtotal = 0
    ElseIf radRegular.Checked Then
        decSubtotal += 1.5
    ElseIf radCappuccino.Checked Then
        decSubtotal += 2.75
    End If

    lblSubtotal.Text = decSubtotal.ToString("C2")

End Sub
Public Function SalesTax() As Decimal

    Const decTaxRate As Decimal = 0.06
    Dim decSalesTax As Decimal
    Dim decSubtotal = Decimal.Parse(lblSubtotal.Text)

    decSalesTax = decSubtotal * decTaxRate

    Return decSalesTax

End Function

Private Sub btnCalculate_Click(sender As Object, e As EventArgs) Handles btnCalculate.Click

    CalculateSubtotal()
    lblSalesTax.Text = SalesTax().ToString("C2")
End Sub
End Class