Comment bien comparer les valeurs après la virgule en C#?

Je viens d'un milieu en C++, et je sais que vous ne pouvez pas comparer avec précision les flotteurs pour l'égalité. Pour le C#, j'ai simplement supposé la même politique s'applique à des valeurs décimales, ou toute valeur à virgule flottante en général.

En gros, j'ai deux valeurs décimales et si elles ne sont PAS égaux les uns aux autres, j'ai besoin d'effectuer une action. par exemple:

decimal value1, value2;
//Assume value1 and value2 are set somewhere to valid values.
if( value1 != value2 )
{
    //Do something
}

Si cela ne fonctionne pas comme prévu, je suis prêt à accepter une solution qui répond à une comparaison d'égalité avec une marge d'erreur, dire comme .00001 ou quelque chose comme ça. Quelle serait la solution recommandée pour ce problème?

  • Ce n'est pas exactement la même comme il se rapporte à double plutôt que de virgule mais jetez un oeil à stackoverflow.com/questions/485175/...
  • Bon point. Retirée.
  • Votre posté code est la bonne façon de comparer deux décimales. Si vous voulez comparer deux décimales avec une marge d'erreur, vous ne if (Math.Abs(value2 - value1) < 0.00001) { ... }.
  • Quand vous dites "décimal", tu parles de le decimal type utile pour les financiers et des calculs monétaires ou êtes-vous à l'aide de "virgule" comme un terme générique pour une variété de virgule flottante de formats, y compris double, float, et decimal (en lien ci-dessus)?
  • Je tiens à préciser que mon utilisation de la "virgule" dans mon post original. En gros, je fais référence à ce type réel 'virgule' (le mot clé). Je ne comprends pas vraiment ce que les données sous-jacentes ressemble pour types décimaux, j'ai simplement supposé qu'ils étaient des valeurs à virgule flottante, où pour les fractions de types qu'ils ne sont jamais exactement les mêmes (comme avec les chars & double en C++).
InformationsquelleAutor void.pointer | 2011-05-09