首先让我说这不是关于十进制精度公差比较的问题!这更多地是大双打的固有表示形式的问题,因为在一定范围内,计算机开始失去明显的精度,而不是小数点。例如
double d1 = 1e20+8000;
double d2 = 1e20;
Debug.WriteLine(d1 == d2);
现在这产生了对我来说是非常不可接受的。此时在项目中转换为十进制是不可能的。是否有一种方法可以减轻这种情况,例如以某种方式计算出在^ 20时计算机代表的数字^ 20 +-8000相同?对于这个指数,公差似乎为8000,它会触发正确的比较,但是我需要精确到小数点的比较,除此之外,我不在乎大数。
答案 0 :(得分:7)
现在得出的结论对我来说是不可接受的。
然后,您应该使用符合您需要的数据类型。期望精度时,切勿使用浮点精度数字。 decimal
是您应该使用的。
更改数据类型是长期有效的唯一选择。如果您不想去那里,那么没有什么选择不需要花费大量工作来检查所做的计算。