2

我有一个 excel 公式,我试图将其“翻译”成 c# 代码。

它用于计算一段时间内的“年金率”(例如 20 年)。

=(((1+E26/100)^D28*((1+E26/100)-1))/((1+E26/100)^D28-1))*100

D28 = 20(年)

E26 = 5,00(百分比)

^代表 Excel 中的指数

由于这些数字,我预计每年 8.02%。

我尝试了几种使用 Math.Pow 的方法,但没有成功。

这是我的第一种方法,它以某种方式给了我 5 的结果。

double usagePanels = 20.0
double rate = 5.0
annPanels = (Math.Pow((1 + rate / 100), usagePanels) *
           ((1 + rate / 100) - 1) /
           Math.Pow(1+rate/100, (usagePanels-1))) * 100;

谢谢你。

4

3 回答 3

2

这应该可以解决问题:

double rate = 5;
double years = 20;
double annunity = Math.Pow(1 + rate / 100, years) * (rate / 100) / Math.Pow(1 + rate / 100, years - 1) * 100;
于 2012-11-19T16:24:20.383 回答
2

尝试:

double usagePanels = 20.0
double rate = 5.0
double annPanels = (Math.Pow((1 + rate / 100), usagePanels) *
         (rate / 100.0)) /
         Math.Pow(1+rate/100, usagePanels)-1)) * 100;

你有右括号,在usagePanels和之间-1,错误......

(我通过在 Excel 和 C# 中拆分公式并比较每个部分来发现这一点。)

编辑:将 Excel 与 C# 进行比较的另一个方便的技巧是为 Excel 中的单元格命名(通过命名范围功能),这样可以使 Excel 公式看起来更接近变量名......

于 2012-11-19T16:46:49.243 回答
2

为了清楚起见,工作结果是

double usagePanels = 20.0
double rate = 5.0
annPanels = (Math.Pow((1 + rate / 100), usagePanels) *
       ((1 + rate / 100) - 1) /
       (Math.Pow(1+rate/100, (usagePanels))-1)) * 100;

感谢 Jason Allen 和 Grhm,他们基本上想通了并给出了很好的建议。

于 2012-11-19T16:58:41.537 回答