Infinity in interest calculation?

雨燕双飞 提交于 2019-12-12 02:59:37

问题


Thanks to Laurence Burke in my other question for the isMaybeMoney function, I am able to determine whether an input is money or not.

What I'm doing now is trying to calculate the total after interest but I keep getting Infinity written to the screen. What in the world is wrong with my interestsaccrued function? It's supposed to be $3,522.55 when I use $1,234 as the starting balance with 3.5% interest.

Can someone please help me out?

static float money;

static void Main()
{
    string[] myMaybeBalances = Accounts.GetStartingBalances();

    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();

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

                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;
                    total = total * money;
                    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;
}

回答1:


You are multiplying total by the rate each step through the while loop, which seems reasonable enough, but you also multiply total by the value of the variable "money", which as far as I can tell is the starting balance.

So you multiply by the starting balance 360 times. If only my savings accounts worked like that! I'm not sure if the rest of the logic is correct, but for a start, try moving the

total = total * money;

to be under the line

float total = 1;

(or better yet just change from

float total = 1;

to

float total = money;

and get rid of the line

total = total * money;

altogether)




回答2:


The codes you have is not evaluate. NO BENEFIT of construct loop for interest calculate! This is not needful yet introduce much of risk for high complication

Here is codes you want for use of FUNCTIONARY encapsulate :

    static void Main() 
    { 
        var interests = new List<decimal>(); 

        foreach (string possibleBalance in Accounts.GetStartingBalances()) 
        foreach (decimal rate in Accounts.GetRates()) 
        { 
            decimal balance; 
            if (!decimal.TryParse(possibleBalance, NumberStyles.Currency, CultureInfo.CurrentCulture, out balance))  
                continue; 

            decimal interest = CalculateInterestAccrued(balance, rate, 12, 30); 
            interests.Add(interest); 
        } 

        foreach (decimal interest in interests) 
            Console.WriteLine(interest); 

        Console.ReadKey(); 
    } 

    static decimal CalculateInterestAccrued(decimal principal, decimal rate, int compoundsPerYear, int years) 
    { 
        return principal * (decimal)Math.Pow((double)(1 + rate / compoundsPerYear), compoundsPerYear * years); 
    } 

thanks,

PRASHANT :)



来源:https://stackoverflow.com/questions/9611022/infinity-in-interest-calculation

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!