我的学校作业遇到了麻烦。我必须计算函数中子程序(工程)销售税的子总计。子程序有效,但我的功能有各种各样的麻烦。调用子过程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
答案 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)
}
}
})
}
类型,所以不需要解析,您只需按原样使用它。