我需要比较两个值。
一个值是 price
这代表某物的当前价格等等 decimal
因为你实际上可以用这个价格购买或出售东西。
另一个价值是 estimatedPrice
这是数学计算的结果等等 double
因为它只是 estimation
你实际上不能做任何“操作” esitmatedPrice
现在我想买 price < estimatedPrice
。
那么我应该将价格加倍或估计价格为十进制吗?
据我所知,在施法后我会得到“轻微的另一个”数字,但似乎我没有其他选择。
这取决于数据。十进制具有更高的精度;双倍有更大的范围。如果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);
}
十进制vs双! - 我应该使用哪一个?何时使用?
如果您更关心精度,请转换为十进制。如果你不是,那就选择双打。
我建议你转换成 十进制。因为看起来你想要操纵货币价值。但我可以给出这个简短的答案:为了准确(专门为金融应用程序操纵金钱价值)应用程序使用小数。如果您喜欢更少的资源和更快的速度,请使用double。
我以前从未在软件中使用过价格,但从我所听到的情况来看,很多都是关于整数的。例如,对于$ 1.23,将其存储为整数123.当您将结果输出给用户时,将在最后完成到小数的转换。
同样,对于您的估计价格,您是否可以处理(比方说)大100倍的数字?