我需要比较两个值。一个值price
代表某物的当前价格,decimal
因为您实际上可以按此价格买卖某物。
另一个值是estimatedPrice
数学计算的结果,所以double
因为它只是estimation
而且你实际上不能通过这个做任何“操作”esitmatedPrice
现在我想买if price < estimatedPrice
。
那么我应该将价格转换为两倍还是将估计价格转换为小数?
我知道在施法后我会得到“另一个”数字,但似乎我没有其他选择。
我需要比较两个值。一个值price
代表某物的当前价格,decimal
因为您实际上可以按此价格买卖某物。
另一个值是estimatedPrice
数学计算的结果,所以double
因为它只是estimation
而且你实际上不能通过这个做任何“操作”esitmatedPrice
现在我想买if price < estimatedPrice
。
那么我应该将价格转换为两倍还是将估计价格转换为小数?
我知道在施法后我会得到“另一个”数字,但似乎我没有其他选择。
这取决于数据。十进制具有更高的精度;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.23,将其存储为整数 123。当您将结果输出给用户时,会在最后完成转换为小数。
同样,对于您的估计价格,您能否处理(比方说)大 100 倍的数字?
我建议您转换为十进制。因为您似乎想要操纵货币价值。但我可以给出这个简短的答案:为了准确(专门为金融应用程序操纵货币价值)应用程序使用小数。如果您喜欢更少的资源和更快的速度,请使用双倍。