Вы действительно не можете сравнивать значения с плавающей запятой и интегральные значения наивным способом; в частности, поскольку есть классические задачи с плавающей точкой для представления . То, что вы можете сделать, это вычесть одно из другого и посмотреть, меньше ли разница между ними, чем некоторая точность, которая вас волнует, например:
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
Вы действительно должны определить для себя, что equality
означает для вас. Например, вы можете захотеть, чтобы значение с плавающей запятой округлялось до ближайшего целого числа, так что 3.999999981 будет «равно» 4. Или вы можете захотеть усечь значение, чтобы оно было равно 3. Все зависит от того, что вы Пытаешься достичь.
РЕДАКТИРОВАТЬ: Обратите внимание, что я выбрал 0,0000001 в качестве порогового значения в качестве примера ... вам нужно решить для себя, какая точность является достаточной для сравнения. Просто поймите, что вы должны находиться в пределах нормальных репрезентативных границ double
, которые, как я считаю, определены как Double.Epsilon
.