我可以说出使用double(或float)而不是decimal的三个优点:
使用较少的内存。
更快是因为浮点数学运算是由处理器原生支持的。
可以表示更大范围的数字。
但这些优势似乎只适用于计算密集型操作,比如在建模软件中发现的那些操作。当然,当需要精度时,不应该使用双精度,例如财务计算。那么,在“正常”应用程序中选择双位数(或浮点数)而不是十进制有什么实际的原因吗?
编辑补充:
谢谢你们的回复,我从他们身上学到了很多。
还有一个问题:一些人认为双数可以更精确地表示实数。当我宣布时,我认为他们通常更准确地代表他们。但是,当执行浮点运算时,精度可能会降低(有时会显著降低),这是真的吗?
Decimal具有更宽的字节,CPU原生支持double。十进制是以10为基数的,所以在计算十进制时发生了十进制到双精度的转换。
For accounting - decimal
For finance - double
For heavy computation - double
请记住。net CLR只支持Math.Pow(double,double)。不支持十进制。
.NET Framework 4
[SecuritySafeCritical]
public static extern double Pow(double x, double y);
像其他人建议的那样,以10为基数的值使用十进制,例如财务计算。
但是对于任意的计算值,double通常更准确。
例如,如果你想计算投资组合中每一行的权重,使用double,因为结果加起来更接近100%。
在下面的例子中,doubleResult比decimalResult更接近1:
// Add one third + one third + one third with decimal
decimal decimalValue = 1M / 3M;
decimal decimalResult = decimalValue + decimalValue + decimalValue;
// Add one third + one third + one third with double
double doubleValue = 1D / 3D;
double doubleResult = doubleValue + doubleValue + doubleValue;
还是以投资组合为例:
投资组合中每一行的市场价值都是一种货币价值,可能最好用十进制表示。
投资组合中每一行的权重(=市场价值/ SUM(市场价值))通常用双数表示更好。