要比较double和decimal,我应该将double转换为十进制或十进制来加倍?

时间:2012-05-16 04:50:46

标签: c#

我需要比较两个值。 一个值为price,表示某物的当前价格,因此decimal因为您实际上可以按此价格购买或出售。

另一个值是estimatedPrice这是数学计算的结果,所以double因为它只是estimation而你实际上不能做任何"操作&# 34;通过这个esitmatedPrice

现在我想购买price < estimatedPrice

那么我应该将价格加倍或估计价格为十进制吗?

据我所知,在演员之后,我会得到另一个&#34;轻微的另一个&#34;数字,但似乎我没有其他选择。

4 个答案:

答案 0 :(得分:14)

这取决于数据。十进制具有更高的精度;双倍有更大的范围。如果double可能在十进制范围之外,你应该将十进制转换为double(或者你实际上可以编写一个返回结果而不进行转换的方法,如果double值超出小数范围;请参阅下面的示例)。

在这种情况下,双值似乎不可能超出小数范围,所以(特别是因为你正在处理价格数据)你应该将双精度值转换为十进制。

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

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 :(得分:4)

decimal vs double! - Which one should I use and when?

如果您更关心精度,请转换为十进制。如果你不是,那就选择双打。

答案 2 :(得分:1)

我建议您转换为十进制。因为看起来你想要操纵货币价值。但我可以给出这个简短的答案:为了准确(专门为金融应用程序操纵金钱价值)应用程序使用小数。如果你喜欢更少的资源和更快的速度,请使用double。

答案 3 :(得分:0)

我之前从未在软件方面处理过价格,但从我所听到的情况来看,很多都是关于整数的。例如,对于$ 1.23,将其存储为整数123.当您将结果输出给用户时,将在最后完成对小数的转换。

同样地,对于您的估计价格,您能否处理(比方说)大100倍的数字?