C# 利息计算有问题(包括测试)

C# 利息计算有问题(包括测试),c#,currency,C#,Currency,感谢各位解决了我上一个问题中的无穷大问题: 最近,虽然我收到了一些客户的电子邮件,抱怨他们得到的数字加起来不正确——但我不明白这怎么可能。我自己用我在下面的测试应用程序中输入的值进行了测试,但我没有看到问题所在——结果是正确的(352.24美元),根据我输入值时使用的其他兴趣程序。我不知道还能去哪里看,有人能帮我弄清楚这里发生了什么吗 以下是我正在测试的修改代码: static float money; static void Main() { //string[] myMaybeB

感谢各位解决了我上一个问题中的无穷大问题:

最近,虽然我收到了一些客户的电子邮件,抱怨他们得到的数字加起来不正确——但我不明白这怎么可能。我自己用我在下面的测试应用程序中输入的值进行了测试,但我没有看到问题所在——结果是正确的(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;
}
当我点击绿色播放按钮时,我得到了这个错误:


错误1运算符“/”不能应用于“decimal”和“double”类型的操作数C:\Users\dave\Documents\Visual Studio 2010\Projects\ConsoleApplication2\ConsoleApplication2\Program.cs 74 41 ConsoleEAP‌​应用程序2

此字符串
rate=(1+rates[i]/12)看起来可疑。如果你除以整数(12),结果也是整数。尝试将其更改为
rate=(1+rates[i]/12.0)

询问客户的样本数据,该样本数据给出错误,并对该样本数据进行测试。如果无法重现错误,则无法进行调试。尽量准确地了解发生错误时客户在做什么为什么要使用float进行货币计算,使用decimal这正是它的用途。@VictorSorokin-我无法直接访问他们的样本数据,即使我要求,他们也说我没有权限访问特定部门的数据。我希望我能给你们更多的信息,因为这对你们来说是难以置信的令人沮丧me@Lloyd-我用的是十进制,我的例子用的是123.45-我也试过不用十进制,但也没用($123)。那不行。汇率是十进制的,不是双精度的。您需要rate=(1+rates[i]/12m),尽管rates[i]已经是十进制类型,但您不需要castI不明白-我尝试将其更改为rate=(1+rates[i]/12.0);当我单击绿色播放按钮时,我遇到了这个错误:错误1运算符“/”不能应用于“decimal”和“double”类型的操作数C:\Users\dave\Documents\Visual Studio 2010\Projects\ConsoleApplication2\ConsoleApplication2\Program。cs 74 41 ConsoleApplication2Jetti是正确的,您应该将12转换为十进制,不要像我建议的那样漂浮。所以它应该是rate=(1+rates[i]/12m)
rate = (1 + rates[i] / 12.0);