我需要比较两个值。一个值是price
,它代表某物的当前价格,因此decimal
,因为您实际上可以通过此价格买卖某物。
另一个值是estimatedPrice
,它是数学计算的结果,所以double
因为它只是estimation
,你实际上不能通过这个esitmatedPrice
做任何"操作"
现在我想买如果price < estimatedPrice
.
那么我应该将价格转换为双倍还是将估计价格转换为十进制?
我知道选角后我会得到"稍微多一点"的数字,但似乎我没有其他选择。
这取决于数据。 十进制具有更高的精度;双倍具有更大的范围。 如果双精度值可能超出小数范围,则应将小数转换为双精度(或者,如果双精度值超出十进制范围,则可以编写一个返回结果而不进行强制转换的方法;请参阅下面的示例(。
在这种情况下,双精度值似乎不太可能超出十进制范围,因此(特别是因为您正在使用价格数据(您应该将双精度转换为十进制。
示例(可以使用一些逻辑来处理 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 倍的数字吗?
我建议您转换为十进制。 因为似乎你想操纵金钱价值。 但我可以给出这个简短的答案:对于准确(专门用于金融应用程序操纵货币价值(应用程序使用十进制。 如果您喜欢更少的资源和更快的速度,请使用双倍。