如何解决System.ArgumentException: 'Argument 'NPer' 不是有效值
然后我能够调试我的编码,当我点击“计算”按钮时,错误消息
System.ArgumentException: 'Argument 'NPer' 不是有效值。'
弹出(第一张图片)。第二张图片是我的应用程序。重置按钮和退出按钮有效,但是当我点击“计算”按钮时它不起作用。
Public Class Form1
Const dblMonths_Year As Double = 12
Const dblNew_Rate As Double = 0.05
Const dblUsed_Rate As Double = 0.08
Dim dblAnnualRate As Double = dblNew_Rate
Private Sub btncalculate_Click(sender As Object,e As EventArgs) Handles btncalculate.Click
Dim dblVehicleCost As Double
Dim dblDownPayment As Double
Dim dblMonths As Double
Dim dblLoan As Double
Dim dblMonthlyPayment As Double
Dim dblInterest As Double
Dim dblPrincipal As Double
Dim intCount As Integer
Dim strOut As String
Dim blnInputOK As Boolean = True
If blnInputOK = True Then
dblLoan = dblVehicleCost - dblDownPayment
dblMonthlyPayment = Pmt(dblAnnualRate / dblMonths_Year,dblMonths,-dblLoan)
lstOutput.Items.Clear()
For intCount = 1 To dblMonths
dblInterest = IPmt(dblAnnualRate / dblMonths_Year,intCount,-dblLoan)
dblPrincipal = PPmt(dblAnnualRate / dblMonths_Year,-dblLoan)
strOut = "Month" & intCount.ToString("d2")
strOut &= ": payment =" & dblMonthlyPayment.ToString("n2")
strOut &= ",interest =" & dblInterest.ToString("n2")
strOut &= ",principal =" & dblPrincipal.ToString("n2")
lstOutput.Items.Add(strOut)
Next
End If
End Sub
Private Sub btnReset_Click(sender As Object,e As EventArgs) Handles btnReset.Click
radNew.Checked = True
dblAnnualRate = dblNew_Rate
lblAnualRate.Text = dblNew_Rate.ToString("p")
txtCost.Clear()
txtDownPayment.Clear()
txtMonths.Clear()
lstOutput.Items.Clear()
txtCost.Focus()
End Sub
Private Sub btnExit_Click(sender As Object,e As EventArgs) Handles btnExit.Click
Close()
End Sub
Private Sub radNew_CheckedChanged(sender As Object,e As EventArgs) Handles radNew.CheckedChanged
If radNew.Checked = True Then
dblAnnualRate = dblNew_Rate
lblAnualRate.Text = dblNew_Rate.ToString("p")
lstOutput.Items.Clear()
End If
End Sub
Private Sub radUsed_CheckedChanged(sender As Object,e As EventArgs) Handles radUsed.CheckedChanged
If radUsed.Checked = True Then
dblAnnualRate = dblUsed_Rate
lblAnualRate.Text = dblUsed_Rate.ToString("p")
lstOutput.Items.Clear()
End If
End Sub
End Class
解决方法
您需要从输入字段设置变量,最好确保用户输入了合理的值,例如:
Public Class Form1
Const MONTHS_PER_YEAR = 12
Const NEW_RATE = 0.05
Const USED_RATE = 0.08
Dim annualInterestRate As Double = NEW_RATE
Private Sub btnCalculate_Click(sender As Object,e As EventArgs) Handles btnCalculate.Click
Dim vehicleCost = 0.0D
Dim downPayment = 0.0D
Dim monthsToPay = 0
Dim inputOk = Decimal.TryParse(tbCost.Text,vehicleCost) AndAlso
Decimal.TryParse(tbDownPayment.Text,downPayment) AndAlso
Integer.TryParse(tbMonthsToPay.Text,monthsToPay)
If inputOk Then
lstOutput.Items.Clear()
Dim loanAmount = vehicleCost - downPayment
Dim monthlyPayment = Pmt(annualInterestRate / MONTHS_PER_YEAR,monthsToPay,-loanAmount)
For monthNumber = 1 To monthsToPay
Dim interestPayment = IPmt(annualInterestRate / MONTHS_PER_YEAR,monthNumber,-loanAmount)
Dim principalPayment = PPmt(annualInterestRate / MONTHS_PER_YEAR,-loanAmount)
Dim strOut = $"Month {monthNumber:D2}"
strOut &= $": payment = {monthlyPayment:C2}"
strOut &= $",interest = {interestPayment:C2}"
strOut &= $",principal = {principalPayment:C2}"
lstOutput.Items.Add(strOut)
Next
End If
End Sub
' other code here
End Class
约定使用 UPPER_SNAKE_CASE 作为常量。变量应该(通常)在使用时声明。
在 VB.NET 中,设置 Option Strict On 和 Option Infer On 以获得更轻松的编程体验。
D
是小数值的 forced literal type。 Decimal 类型应该用于货币,即使 Pmt、IPmt 和 PPmt 函数没有(我怀疑在编写这些函数时 Decimal 类型不可用)。
我使用 interpolated strings 向您展示了如何在您的程序中使用它们:它们有助于提高代码的可读性。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。