当我尝试运行程序来计算付款和总利息时,我得到“从字符串转换”到“输入'Double'无效。”
我做错了什么?
Dim P As Double
Dim R As Double
Dim N As Double
Dim Payment As Double
Dim totalInterest As Double
Private Sub btnAnalyze_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAnalyze.Click
P = CDbl(txtAmount.Text)
N = CDbl(txtDuration.Text)
R = CDbl(txtInterestRate.Text)
Payment = (P * R) / (1 - (1 + R) ^ (-N))
totalInterest = (N * Payment) - P
Payment = CDbl(txtPayment.Text)
totalInterest = CDbl(txtInterest.Text)
If P < 0 Then
MessageBox.Show("Please enter in loan amount")
End If
If R <= 0 Then
MessageBox.Show("Please enter in loan amount")
End If
If N <= 0 Then
MessageBox.Show("Please enter in loan amount")
End If
End Sub
End Class
答案 0 :(得分:4)
您的TextBox
项之一尚未填写。
因此,当您使用CDbl
时,如P = CDbl(txtAmount.Text)
,如果TextBox
为空,则会导致此错误。
更好的选择是使用Double.TryParse代替CDbl
,因为它可以让您提出正确的信息:
Private Sub btnAnalyze_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAnalyze.Click
If Not Double.TryParse(txtAmount.Text, P) Then
MessageBox.Show("Please correct the loan amount")
Exit Sub
End If
' Do the same for all other CDbl checks
答案 1 :(得分:1)
如果文本框为空,则使用函数的Val()代替CDbl(),将字符串转换为0默认值。然后可能没有运行时错误..
答案 2 :(得分:0)
我会说这只是因为你想要:
txtPayment.Text = CStr(Payment)
txtInterest.Text = CStr(totalInterest)
而不是
Payment = CDbl(txtPayment.Text)
totalInterest = CDbl(txtInterest.Text)
答案 3 :(得分:0)
我知道这个原始问题很旧,但是在Google上它正在流行。
到目前为止,每个人在某种程度上都是正确的。您尝试的CDbl函数不能很好地处理空白(它会崩溃)。在某些情况下(特别是我的),TryParse不是一个选项(有关真正的解决方案,请参阅下文“为什么”)
但是,如果您期望数据中存在数字,并且不可能接收到错误(长话短说,这就是我的上下文),那么您必须使用CDbl,因为没有其他转换方法可以用于单个表达式(再次,我的上下文)。
就我而言,由于我无法声明变量,因此我找到了解决此问题的好方法。我是用连接器完成的,在我的情况下(我正在使用vb.net),它是CDbl("0" + txtAmount.Text)
,其中P是要测试的原始数据,然后是R和N等。
这与Val()
一样,默认情况下是前导零,您没有更改变量中的任何数据,而只解决了空白。还有更多的全面解决方案,但是我无法使用那些解决方案,因为我只能使用所谓的“一线”解决方案