我想知道为什么我们正在使用的书的例子是在必要时使用小数和双打以及强制转换为十进制。只是制作小数并且完全避免演员表会不简单吗?
这是我很好奇的主要代码块。
decimal amount;
decimal principal = 1000;
double rate = 0.05;
for (int year = 1; year <= 10; year++)
{
amount = principal * ((decimal) Math.Pow(1.0 + rate, year));
}
我忽略了任何性能或准确性问题吗?
答案 0 :(得分:6)
没有Math.Pow
的重载与decimal
一起使用 - 实数上的取幂本身就是不准确的,所以对于这样的重载存在不会有太多意义。
现在,因为唯一使用rate
的地方是计算复合因子(Pow
调用),所以将它声明为double
是有意义的 - 更高的精度将不会'如果它只是被“抛弃”,请提供帮助。
其余的变量代表货币,decimal
的 用例(这就是decimal
文字的后缀为M
)的原因。可以想象另一个计算commmision
$2.10
被添加到amount
- 我们不希望这样的计算变得不准确,所有这些都是为了一个讨厌的(不准确的)类型一致性复利计算。
因此不一致。
答案 1 :(得分:2)
十进制的范围较小,但比双精度更准确。十进制是您应该用来代表.Net的钱。在您给出的示例中,金额和本金是货币值。费率不是。因此,他们使用正确的数据类型。
以下是Decimal上的MSDN:MSDN Decimal
答案 2 :(得分:0)
您应该阅读this topic
它归结为:十进制用于金钱/当你需要精确的计算时,而double更适合科学计算,因为它表现更好。