Возникли проблемы с начислением процентов (тест включен) - PullRequest
0 голосов
/ 20 марта 2012

Спасибо, ребята, за решение проблемы бесконечности, которую я получил из моего последнего вопроса:

Бесконечность начисления процентов?

В последнее время я пересылал электронные письма от клиентов с жалобами на то, что числа, которые они получают, заканчиваются неправильно, но я не понимаю, как это может быть возможно. Я сам проверил это, используя значения, которые я поместил в свое тестовое приложение ниже, но я просто не вижу проблемы - результаты получаются правильно ($ 352,24) в соответствии с другой программой интереса, которую я использую, когда я набираю значения , Я не уверен, где еще искать, может кто-нибудь помочь мне выяснить, что здесь происходит?

Вот модифицированный код, с которым я тестирую:

static float money;

static void Main()
{
    //string[] myMaybeBalances = Accounts.GetStartingBalances();
    string[] myMaybeBalances = new string[1];
    myMaybeBalances[0] = "123.45";

    myIsMaybeMoneyValidator Miimv = new myIsMaybeMoneyValidator();

    ArrayList interests = Miimv.interestsAccrued(myMaybeBalances);
    foreach (object interest in interests)
    {
        Console.WriteLine(interest);
    }

    Console.ReadLine();
}

public ArrayList interestsAccrued(string[] myMaybeBalances)
{
    ArrayList interests = new ArrayList();
    foreach (string myMaybeBalance in myMaybeBalances)
    {
        bool myResult = isMaybeMoney(myMaybeBalance);
        if (myResult == true)
        {
            //decimal[] rates = Accounts.GetRates();
            decimal[] rates = new decimal[1];
            rates[0] = (decimal)0.0350;

            for (int i = 0; i < rates.Length; i++)
            {
                decimal rate = rates[i];
                float total = money;

                int n_X_t = 360;
                while (n_X_t != 0)
                {
                    rate = (1 + rates[i] / 12);
                    float myRate;
                    float.TryParse(rate.ToString(), out myRate);

                    total = total * myRate;
                    n_X_t = n_X_t - 1;
                }
                interests.Add(total);
            }
        }
    }
    return interests;
}

public bool isMaybeMoney(object theirMaybeMoney)
{
    string myMaybeMoney = theirMaybeMoney.ToString();

    float num;
    bool isValid = float.TryParse(myMaybeMoney,
    NumberStyles.Currency,
    CultureInfo.GetCultureInfo("en-US"), // cached
    out num);

    money = num;
    return isValid;
}

EDIT:

Я пытался изменить его на

rate = (1 + rates[i] / 12.0); 

и я получаю эту ошибку, когда нажимаю зеленую кнопку воспроизведения:

Ошибка 1 Оператор «/» не может быть применен к операндам типа «десятичный» и «двойной» C: \ Users \ dave \ Documents \ Visual Studio 2010 \ Projects \ ConsoleApplication2 \ ConsoleApplication2 \ Program.cs 74 41 ConsoleAp plication2

1 Ответ

0 голосов
/ 20 марта 2012

Эта строка rate = (1 + rates[i] / 12); выглядит подозрительно. Если вы разделите на целое число (12), результат также будет целым числом. Попробуйте изменить его на rate = (1 + rates[i] / 12.0);

...