使用具有小数的指数

时间:2015-03-22 04:09:20

标签: c# winforms double decimal exponent

我仍然是学习C#的新手,并且想知道我是否能得到一些帮助。我正在编写一个程序C#和Windows表单,以便用户可以计算他们的每月付款和抵押贷款的利息。我支付的等式是: 付款= p * r /(1 - (1 + r)^( - n)) 其中p是贷款金额,r是从0(0%)和1(100%)的数字给出的月利率,n是月贷款的持续时间 然后支付的总利息的公式是:总利息= n * payment -p

现在我尝试使用Math.Pow方法输入所有这些数字作为双倍付款并得到错误的计算。我假设速率需要为小数,所以当我尝试将它们全部作为小数时,VS不喜欢" ^"方法或math.pow方法。所以我的问题是,你如何使用带有指数的小数? 对于那些希望看到我当前代码的人,请注意我只是想在我开始添加额外的'其他'之前完成计算。语句。

        decimal amnt = Convert.ToDecimal(txtAMNT.Text);
        string Amount=Convert.ToString(txtAMNT.Text);
        decimal rate = Convert.ToDecimal(txtRATE.Text);
        string Rate = Convert.ToString(txtRATE.Text);
        decimal time = Convert.ToDecimal(txtTIME.Text);
        string Time=Convert.ToString(txtTIME.Text);
        decimal monthpay;
        decimal totalinterest;
        decimal realrate = rate / 100;

        if ((Amount == "")||(Rate == "")||(Time==""))
        {
            MessageBox.Show("Please fill all boxes with numbers");
        }
        else
        {
            monthpay=amnt*realrate/(1-(1+realrate)^(-time));
                totalinterest=time*monthpay-amnt;
            mtbMonPay.Text=monthpay.ToString("c");
            mtbTotalInterest.Text=totalinterest.ToString("c");
        }

2 个答案:

答案 0 :(得分:3)

您应该使用double进行此计算。

您获得错误结果的原因是您忘记将年利率除以12以获得每月利率。

十进制不支持取幂。此外,the caret operator^)不适用于C#中的取幂;没有取幂运算符。你只需要打电话给Math.Pow。

另见https://stackoverflow.com/a/6426826/385844

答案 1 :(得分:0)

对于您正在使用的精确度,

double应该足够准确。尝试将所有小数更改为双倍。

另一个问题是你的比率。实际汇率是输入值/ 100,这意味着1表示100%实际上最终为1%。