如果用户输入了无效的输入,则需要中止。还可以使用内置的货币解析器( 使用货币时,请始终使用 避免使用匈牙利符号(在变量名前面加上其类型的缩写(
我是使用visualbasic的初学者,在应用程序中无法正确显示我的年份。我的应用程序应该显示费率:3%-7%,然后在每个费率下显示年份:1-5,余额应该显示每年的总额。我得到的是3%的利率,1-5年,以及每年的余额。第六年为4%,而不是1-5年,第六年保持平衡。5%利率显示第7年和该年的余额,依此类推。仅供参考:我需要保留For。。。下一个语句并包含"年"的Do…Loop语句。
我插入图片是为了更好地理解我想要解释的内容。如果有任何帮助,我将不胜感激。
正确的方式错误的方式
这是代码:
Dim dblDeposit As Double
Dim dblBalance As Double
Dim intYear As Integer = 1
Double.TryParse(txtDeposit.Text, dblDeposit)
txtBalance.Text = "Rate" & ControlChars.Tab &
"Year" & ControlChars.Tab & "Balance" &
ControlChars.NewLine
' Calculate and display account balances.
For dblRate As Double = 0.03 To 0.07 Step 0.01
txtBalance.Text = txtBalance.Text &
dblRate.ToString("P0") & ControlChars.NewLine
Do
dblBalance = dblDeposit * (1 + dblRate) ^ intYear
txtBalance.Text = txtBalance.Text &
ControlChars.Tab & intYear.ToString &
ControlChars.Tab & dblBalance.ToString("C2") &
ControlChars.NewLine
intYear = intYear + 1
Loop While intYear < 6
Next dblRate
在Do
循环的每次迭代之前,您需要重置intYear
。
Dim dblDeposit As Double
Dim dblBalance As Double
Dim intYear As Integer = 1
Double.TryParse(txtDeposit.Text, dblDeposit)
txtBalance.Text = "Rate" & ControlChars.Tab &
"Year" & ControlChars.Tab & "Balance" &
ControlChars.NewLine
' Calculate and display account balances.
For dblRate As Double = 0.03 To 0.07 Step 0.01
txtBalance.Text = txtBalance.Text &
dblRate.ToString("P0") & ControlChars.NewLine
intYear = 1 ' Reset intYear here before each loop
Do
dblBalance = dblDeposit * (1 + dblRate) ^ intYear
txtBalance.Text = txtBalance.Text &
ControlChars.Tab & intYear.ToString &
ControlChars.Tab & dblBalance.ToString("C2") &
ControlChars.NewLine
intYear = intYear + 1
Loop While intYear < 6
Next dblRate
其他一些建议:
由于String
在.NET中的工作方式,循环中的String
串联效率很低(String
是不可变的,因此每次更改字符串的操作都会导致重新分配和复制,这是一个有点昂贵的操作(,因此我建议您使用StringBuilder
,并在最后只分配txtBalance.Text
NumberStyles.Currency
(Decimal
或整数便士/美分Never使用IEEE-754浮点类型(Single
和Double
(来表示货币,因为它们不精确Dim depositAmount As Decimal
If Not Decimal.TryParse( txtDeposit.Text, NumberStyles.Currency, CultureInfo.CurrentCulture, depositAmount ) Then
MsgBox( "Invalid input" ).
Exit Sub
End If
Dim sb As New StringBuilder()
sb.Append( "Rate Year Balance" ).AppendLine() ' Tab characters are embedded in the string literal.
' Calculate and display account balances.
For rate As Double = 0.03 To 0.07 Step 0.01
sb.AppendFormat( " {0:P0}", rate ).AppendLine();
Dim year As Integer = 1 ' Reset intYear here before each loop
Do
Dim balance As Decimal = depositAmount * ( 1 + rate ) ^ year ' I think you should add extra parenthesis to make it clear which value the `^ year` is being applied to.
sb.AppendFormat( " {0:D} {1:C2}", year, balance ).ToString()
year = year + 1
Loop While year < 6
Next rate
txtBalance.Text = sb.ToString()