Амортизация по прямой линии с использованием цикла for - PullRequest
0 голосов
/ 10 апреля 2020

Я не уверен, где мой код идет неправильно на этом. список должен отображаться как:

   0       10,000.00               0.00           0.00
   1        8,000.00           2,000.00       2,000.00
   2        6,000.00           2,000.00       4,000.00
   3        4,000.00           2,000.00       6,000.00
   4        2,000.00           2,000.00       8,000.00
   5            0.00           2,000.00      10,000.00

Но это выглядит так:

   0        8,000.00               0.00       2,000.00
   1        6,000.00           2,000.00       4,000.00
   2        4,000.00           2,000.00       6,000.00
   3        2,000.00           2,000.00       8,000.00
   4            0.00           2,000.00      10,000.00
   5        -2000.00           2,000.00      12,000.00

Кажется, я не могу понять, что происходит, поскольку я новичок в c#. Вот мой код:

    private void ComputeDepreciation(double AssetValue,double years)
    {
        double AnnualDepreciation, TotalDepreciation;
        AnnualDepreciation = 0;
        TotalDepreciation = 0;
        AnnualDepreciation = AssetValue / years;
        for (years = 0; years <= double.Parse(textBox2.Text); years++)
        {
            AssetValue = AssetValue - AnnualDepreciation;
            TotalDepreciation = TotalDepreciation + AnnualDepreciation;
            lstOutput.Items.Add(String.Format(strOutput, years, AssetValue, AnnualDepreciation, TotalDepreciation));
        }
    }    

Пожалуйста, помогите!

1 Ответ

1 голос
/ 10 апреля 2020

Я думаю, вы хотите что-то вроде этого:

scr1

Убедитесь, что вы установили шрифт в моноширинный стиль, чтобы форматирование столбцов было сохранено .

Вы можете заполнить ListBox, установив его свойство .DataSource в коллекцию строк, точно так же, как метод нажатия кнопки ниже. Кроме того, рекомендуется использовать decimal для любых денег, связанных с предотвращением любых глупостей, таких как 1.199999999997 для суммы.

private IList<string> ComputeDepreciation(decimal assetValue, int noYears)
{
    List<string> table = new List<string>();
    // Add header
    table.Add($"{"Yrs",3} {"Asset Value",15} {"Actual Depr.",18} {"Total Depr.",14}");
    // Year 0 values
    int year = 0;
    decimal totalDepreciation = 0m;
    decimal actualDepreciation, annualDepreciation = assetValue/noYears;
    do
    {
        // Cannot depreciate more than the value
        actualDepreciation = Math.Min(annualDepreciation, assetValue);

        // Add formatted row with column widths 3, 15, 18, 14
        // Currency formatted with "C2", two decimals and currency symbol.
        table.Add($"{year,3} {assetValue,15:C2} {actualDepreciation,18:C2} {totalDepreciation,14:C2}");

        // adjust values each year
        assetValue -= actualDepreciation;
        totalDepreciation += actualDepreciation;
        year++;

    } while (actualDepreciation>0m);

    return table;
}
private void fillButton_Click(object sender, EventArgs e)
{
    listBox1.DataSource = ComputeDepreciation(10000m, 5);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...