2012-03-07 15 views
0

isMaybeMoney関数の私の他の質問にLaurence Burkeのおかげで、私は入力がお金かどうかを判断することができます。金利計算の無限大ですか?

私が今やっていることは、興味のある後の合計を計算しようとしていますが、私はInfinityを画面に書き続けています。私の興味を引っ張った機能に間違っているのは何ですか?私が3.534%の利息を持つ開始残高として1,234ドルを使用した場合、それは3,522.55ドルとされています。

誰かお手伝いできますか?

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; 
} 
+2

です常に浮動小数点と小数の間の変換?フロートは数値計算には不適切です - それを取り除きます。 (なぜ.NETの命名規則やジェネリック型を使用していないのですか?) –

+0

これは何ですか? 'total = total * money;'? –

+0

'rates [0]'の値は何ですか? –

答えて

1

あなたは率によって十分に合理的なようだwhileループ、を介して各ステップを合計を乗算されていますが、私の知る限りで変数「お金」の値によって合計を掛けバランスを開始する。

出発時の残高を360倍します。私の貯蓄口座だけがそのように働いていれば!私は残りのロジックが正しいかどうかわからないんだけど、スタートのために、ライン

float total = 1; 

下に

total = total * money; 

を移動してみてください(またはより良いまだちょうど

から変更します

float total = money; 

およびGに

float total = 1; 

ら、あなたが持っているコード

+0

また、@ John Skeetが述べたように...あなたの変数ネーミングなどがあなたのコードを他の人に理解しやすくするために、標準のC#コーディング規則について学ぶ時間を費やすことは良いかもしれません。浮動小数点計算に固有の不正確さ(すなわち、浮動小数点または二重変数を使用する場合)に悩まされないため、財務計算などによく適しています。 – joshuahealy

0

)ラインを完全

total = total * money; 

のridは評価ではありません。興味のある構成ループの利点は計算できません! これが入用ではありません、まだここでは、高い合併症

のリスクの多くを紹介し、あなたがFUNCTIONARYのカプセル化を使用するためにしたいコードされる:なぜあなたは

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

おかげで、

のPrashant :)

関連する問題