C# 复利计算

C# 复利计算,c#,C#,我有一个C代码,每年计算复利加本金 static void CompoundInterest(double principal, double interestRate, double years, double annualCompound) { var total = 0.0; for (int t = 1; t < years + 1; t++) { total = principal * Math.Po

我有一个C代码,每年计算复利加本金

static void CompoundInterest(double principal, double interestRate, double years, double annualCompound)
    {
        var total = 0.0;
        for (int t = 1; t < years + 1; t++)
        {
            total = principal * Math.Pow((1 + interestRate / annualCompound),
                                     (annualCompound * t));
            Console.Write("Your Total for Year {0} "
                        + "is {1}. \n", t, total);
        }
    }
输出是

Your Total for Year 1 is 1051.161897881733.
Your Total for Year 2 is 1104.941335558327.
Your Total for Year 3 is 1161.4722313334678.

我该如何精确地将其舍入?另一个问题是
Math。Pow
使用
double
,但在财务计算中,我们需要
十进制
。我该如何解决这个问题?在
Math.Pow
之后转换为十进制?

如果愿意,可以直接将双精度转换为十进制

decimal decimalTotal = (decimal)total;
至于舍入,有一个内置函数Math.Round,它采用多种数字格式。它有一个重载来指定需要多少小数点

decimal roundedDecimal = Math.Round(decimalTotal, 2);

如果您愿意,可以直接将双精度转换为十进制

decimal decimalTotal = (decimal)total;
至于舍入,有一个内置函数Math.Round,它采用多种数字格式。它有一个重载来指定需要多少小数点

decimal roundedDecimal = Math.Round(decimalTotal, 2);

我做了一些测试,先四舍五入,然后转换成十进制,再转换成十进制,最后四舍五入。两人的结果相同

但从逻辑的角度来看,我会先转换而不是在单词后取整。这样,我将更好地控制测试转换的内容和舍入的内容

对于转换,有不同的答案,但我发现所有.net框架和核心都支持这种方法

例如,十进制值=转换为十进制值(双倍值)

然后是你,有人问了你,在这里得到了答案


为了以防万一,参考。

我做了一些测试,先四舍五入,然后转换为十进制,再转换为十进制,最后四舍五入。两人的结果相同

但从逻辑的角度来看,我会先转换而不是在单词后取整。这样,我将更好地控制测试转换的内容和舍入的内容

对于转换,有不同的答案,但我发现所有.net框架和核心都支持这种方法

例如,十进制值=转换为十进制值(双倍值)

然后是你,有人问了你,在这里得到了答案


以防万一,请参考。

关于双精度到小数点和四舍五入的内容,谢谢。那么,我应该将double转换为decimal,然后只对其进行四舍五入吗?这样做会影响精度吗?关于双精度到小数点和四舍五入,谢谢。那么,我应该将double转换为decimal,然后只对其进行四舍五入吗?这样做会影响精度吗?您还应该了解各种舍入方案的工作原理。例如,银行家取整需要
1,1.5,2,2.5,3,3.5,4
并将其取整为
1,2,2,3,4,4
。您还应该了解各种取整方案的工作原理。例如,银行家四舍五入将采用
1,1.5,2,2.5,3,3.5,4
并将其四舍五入为
1,2,2,3,4,4