功能问题和错误

时间:2018-04-02 03:33:15

标签: vb.net

我的学校作业遇到了麻烦。我必须计算函数中子程序(工程)销售税的子总计。子程序有效,但我的功能有各种各样的麻烦。调用子过程SubTotal()不返回值,从lblSubtotal获取值会产生System.FormatException:'输入字符串格式不正确。'。任何提示和指示都将非常感谢,谢谢。

代码

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

1 个答案:

答案 0 :(得分:0)

当前问题是Label中的值格式为货币,但是当您尝试将其解析回来时,您没有指定。 Decimal.Parse允许您指定如何格式化输入,如果您没有指定货币,则货币无效。您应该对Decimal.Parse等进行一些阅读,以了解如何指定允许的格式。

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

在这种情况下,Decimal变量中的值为decSubtotal,而Label的来源为Label。当您需要这些数据时,您应该从同一个变量获取数据,而不是Decimal。这意味着该变量需要在类级别而不是在方法级别声明,即成员而不是本地。因为该变量是func postReceiptData(dict: [String: Any], completion: ((Any)->())?) { let url = "myServerUrl" Alamofire.requestURL(string: url, method: .post, parameter: dict, encoding: JSONEncoding.default, headers: applicationHeader(), completion: { success, response in switch response.result { case .success(let value): let json = JSON(value) let status = json["status"].intValue print(json["status"]) print("~~~~~~") // Success status = 10, failure status = -10 let myStatus = (json["status"] if myStatus == 10 { print("Result Success") }else{ // Call your method again postReceiptData(your argument) } if let _completion = completion { _completion(value) } case .failure(let error): if error._code == NSURLErrorTimedOut { Util.showDefaultToast(message: "Network Error") } if let _completion = completion { _completion(error.localizedDescription) } } }) } 类型,所以不需要解析,您只需按原样使用它。