关于C#:要比较double和decimal,应该将double转换为decimal还是decimal转换为double?


to compare double and decimal should I cast double to decimal or decimal to double?

我需要比较两个值。一个值是price,它代表某物的当前价格,所以decimal,因为你实际上可以按这个价格购买或出售某物。

另一个值是estimatedPrice,它是数学计算的结果,所以double,因为它只是estimation,您不能用这个esitmatedPrice执行任何"操作"。

现在,我想买一台如果是price < estimatedPrice

那么我应该把价格定为双倍还是估计价格定为十进制?

我知道,在选完演员后,我会得到"另一个"的数字,但似乎我没有其他的选择。


这取决于数据。十进制的精度更高;double的范围更大。如果double可能在十进制范围之外,则应将十进制转换为double(或者,如果double值在十进制范围之外,则可以编写一个不进行转换而返回结果的方法;请参见下面的示例)。

在这种情况下,双精度值似乎不太可能超出十进制范围,因此(尤其是在处理价格数据时),应该将双精度值强制转换为十进制。

示例(可以使用一些逻辑来处理NaN值):

1
2
3
4
5
6
7
8
private static int Compare(double d, decimal m)
{
    const double decimalMin = (double)decimal.MinValue;
    const double decimalMax = (double)decimal.MaxValue;
    if (d < decimalMin) return -1;
    if (d > decimalMax) return 1;
    return ((decimal)d).CompareTo(m);
}

十进制与双精度!-我应该用哪一个?什么时候用?

如果您更关心精度,请将其转换为十进制。如果你没有,就去双打。


我建议你把它转换成十进制。因为你似乎想操纵货币价值。但我可以给出一个简短的答案:对于精确的(专门为金融应用操纵货币价值)应用程序,请使用十进制。如果你更喜欢更少的资源和更快的速度,就加倍使用。


我以前从来没有在软件中处理过价格问题,但据我所听到的,很多都是处理整数的。例如,对于$1.23,将其存储为整数123。当您将结果输出给用户时,到小数点的转换在最后完成。

同样,对于你的估计价格,你能处理100倍大的数字吗?