19

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

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

现在我想买if price < estimatedPrice

那么我应该将价格转换为两倍还是将估计价格转换为小数?

我知道在施法后我会得到“另一个”数字,但似乎我没有其他选择。

4

4 回答 4

18

这取决于数据。十进制具有更高的精度;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);
}
于 2012-05-16T05:03:59.970 回答
4

十进制与双倍!- 我应该使用哪一个以及何时使用?

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

于 2012-05-16T04:54:54.837 回答
0

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

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

于 2012-05-16T04:59:39.017 回答
0

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

于 2012-05-16T05:07:11.063 回答