3

当我尝试运行程序来计算付款和总利息时,我得到“从字符串转换”到类型“双”无效。

我究竟做错了什么?

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

4 回答 4

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
于 2012-09-28T01:08:41.933 回答
2

我知道这个原始问题很老,但它在 Google 上很流行。

到目前为止,在某种程度上,每个人都是对的。您尝试的 CDbl 函数不能很好地处理空白(它会爆炸)。在某些情况下(特别是我的) TryParse 不是一个选项(请参阅下面的“为什么”以及真正的解决方案)

但是,如果您期望数据中有数字,并且不可能收到错误(长话短说,这是我的上下文),那么您必须使用 CDbl,因为没有其他转换方法可以用于一个表达式(同样,我的上下文)。

就我而言,由于我无法声明变量,因此我找到了一个优雅的解决方案。我用连接器完成了它,在我的情况下(我使用的是 vb.net )它是CDbl("0" + txtAmount.Text)P 是您测试的原始数据,然后是 R 和 N 等。

这与Val()过去一样,默认前导零,您没有更改变量中的任何数据,但只解决了空白。还有更多完整的解决方案,但我无法使用这些解决方案,因为我只能使用“单线”可以这么说

于 2019-06-03T20:26:38.707 回答
1

如果文本框为空,则使用函数的 Val() 代替 CDbl(),它将字符串转换为默认值 0。然后运行时错误可能不会出现..

于 2012-10-01T06:03:07.880 回答
0

我会说这仅仅是因为你想要:

txtPayment.Text = CStr(Payment)
txtInterest.Text = CStr(totalInterest)

代替

Payment = CDbl(txtPayment.Text)
totalInterest = CDbl(txtInterest.Text)
于 2012-10-01T05:56:47.537 回答