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

jav*_*red 13 c#

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

另一个值是estimatedPrice数学计算的结果,double因为它只是estimation,你实际上不能做任何"操作"esitmatedPrice

现在我想买price < estimatedPrice.

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

我明白在投射后我会得到"轻微的另一个"数字,但似乎我没有其他选择.

pho*_*oog 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);
}
Run Code Online (Sandbox Code Playgroud)