Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 想知道我们为什么要读这本书';重复使用是指使用双精度和小数,而不仅仅是小数_C# - Fatal编程技术网

C# 想知道我们为什么要读这本书';重复使用是指使用双精度和小数,而不仅仅是小数

C# 想知道我们为什么要读这本书';重复使用是指使用双精度和小数,而不仅仅是小数,c#,C#,我想知道为什么我们正在使用的这本书的例子是使用小数和双精度的混合,并在必要时转换为小数。将所有内容都改为小数,并完全避免强制转换,这不是更简单吗 下面是我很好奇的主要代码块 decimal amount; decimal principal = 1000; double rate = 0.05; for (int year = 1; year <= 10; year++) { amount = principal * ((decimal) Math.Pow(1.0 + rate,

我想知道为什么我们正在使用的这本书的例子是使用小数和双精度的混合,并在必要时转换为小数。将所有内容都改为小数,并完全避免强制转换,这不是更简单吗

下面是我很好奇的主要代码块

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));
}
小数金额;
十进制本金=1000;
倍率=0.05;

对于(int year=1;yearDecimal的范围较小,但比double更精确。Decimal是在.Net中表示货币的方法。在您给出的示例中,金额和本金是货币值。利率不是。因此,它们使用的数据类型正确


这是关于十进制的MSDN:

没有
数学重载。Pow
十进制
一起工作-实数上的求幂本质上是不准确的,因此这种重载的存在没有多大意义

现在,由于使用
rate
的唯一地方是计算复合因子(调用
Pow
),因此将其声明为
double
——如果只是“丢弃”,则更高的精度将毫无帮助

其余变量表示货币,这是
decimal
的用例(这就是为什么
decimal
文本的后缀是
M
)。我们可以想象另一种计算方式,其中,
commmision
$2.10
被添加到
amount
——我们不希望这种计算变得不准确——所有这些都是为了一个讨厌的(不准确的)复利计算中的类型一致性

因此不一致。

您应该阅读


归结起来就是:十进制是用于金钱/当你需要精确的计算时,而double更适合于科学计算,因为它性能更好。

Math.Pow没有需要小数的重载。啊,所以不是。我理解
decimal
double
之间的主要区别,这就是ac事实上,我问的原因是——我们已经在使用这个等式中的小数了,所以两者之间的性能增益是没有意义的。谢谢。