Vous ne pouvez vraiment pas comparer les valeurs à virgule flottante et intégrale de manière naïve; en particulier, car il y a le classique floating pointrepresentation challenges. Ce que vous pouvez faire est de soustraire l'un de l'autre et voir si la différence entre eux est inférieure à une certaine précision que vous aimez, comme ceci:
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
Il faut vraiment définir pour vous-même ce que equality
signifie pour vous . Par exemple, vous souhaiterez peut-être arrondir une valeur à virgule flottante vers l'entier le plus proche, de sorte que 3,999999981 soit égal à 4 ou que vous souhaitiez tronquer la valeur pour qu'elle soit effectivement 3. Tout dépend de ce que vous Essayons de réaliser.
EDIT: Notez que j'ai choisi 0,0000001 comme une valeur de seuil par exemple ... vous devez décider par vous-même ce que la précision est suffisante pour la comparaison. Il suffit de réaliser que vous devez être dans les limites normales de représentation de double
qui, je crois, est défini comme Double.Espilon
.
Voir la question connexe: –
Konamiman
[Quelle est la méthode la plus efficace pour les comparaisons flottantes et les doubles comparaisons?] (Http: // stackoverflow.com/q/17333/995714) –