如何在vb.net编码中正确显示年份

  • 本文关键字:显示 编码 vb net vb.net loops
  • 更新时间 :
  • 英文 :


我是使用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浮点类型(SingleDouble(来表示货币,因为它们不精确
  • 避免使用匈牙利符号(在变量名前面加上其类型的缩写(
  • 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()
    

    最新更新