“从字符串”“转换为”Double“类型无效。”在VB中

时间:2012-09-28 01:05:53

标签: vb.net

当我尝试运行程序来计算付款和总利息时,我得到“从字符串转换”到“输入'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

4 个答案:

答案 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()一样,默认情况下是前导零,您没有更改变量中的任何数据,而只解决了空白。还有更多的全面解决方案,但是我无法使用那些解决方案,因为我只能使用所谓的“一线”解决方案