比较Double和Int的最佳方法是什么?

Mur*_*are 24 c# double int equals

C#中的以下代码不起作用:

int iValue = 0;
double dValue = 0.0;

bool isEqual = iValue.Equals(dValue);
Run Code Online (Sandbox Code Playgroud)

那么,问题是:比较Double和Int的最佳方法是什么?

LBu*_*kin 49

你真的无法以天真的方式比较浮点值和积分值; 特别是,因为经典的浮点 表示挑战.你可以做的是从另一个中减去一个,看看它们之间的差异是否小于你关心的精度,如下所示:

int iValue = 0;
double dValue = 0.0;

var diff = Math.Abs(dvalue - iValue);
if( diff < 0.0000001 ) // need some min threshold to compare floating points
   return true; // items equal
Run Code Online (Sandbox Code Playgroud)

你真的要为自己定义对你equality意味着什么.例如,您可能希望浮点值向最接近的整数舍入,以便3.999999981将"等于"4.或者您可能希望截断该值,因此它实际上将为3.这完全取决于您的内容正在努力实现.

编辑:请注意,我选择0.0000001作为示例阈值...您需要自己决定什么精度足以进行比较.只是意识到你需要处于double我认为被定义为的正常表示范围内Double.Epsilon.

  • Double.Epsilon仅在您减去0和1之间的值时才有用,因为它是"最小正值Double值大于零".因为'double`值不是均匀间隔的,并且它们的距离随着它们的大小而增加,所以如果你减去两个值,你将不会得到Double.Epsilon周围的东西. (5认同)