Lire en anglais

Partager via


Double.Equals Méthode

Définition

Retourne une valeur indiquant si deux instances de Double représentent la même valeur.

Surcharges

Equals(Double)

Retourne une valeur indiquant si cette instance et un objet Double spécifié représentent la même valeur.

Equals(Object)

Retourne une valeur indiquant si cette instance équivaut à un objet spécifié.

Equals(Double)

Source:
Double.cs
Source:
Double.cs
Source:
Double.cs

Retourne une valeur indiquant si cette instance et un objet Double spécifié représentent la même valeur.

C#
public bool Equals(double obj);

Paramètres

obj
Double

Objet Double à comparer à cette instance.

Retours

true si obj est égal à cette instance ; sinon, false.

Implémente

Remarques

Pour plus d’informations sur cette API, consultez Remarques supplémentaires sur l’API pour Double.Equals.

Notes pour les appelants

La résolution des surcharges du compilateur peut tenir compte d’une différence apparente dans le comportement des deux Equals(Object) surcharges de méthode. Si une conversion implicite entre l’argument obj et un Double est définie et que l’argument n’est pas typé en tant que Object, les compilateurs peuvent effectuer une conversion implicite et appeler la Equals(Double) méthode . Sinon, ils appellent la Equals(Object) méthode , qui retourne false toujours si son obj argument n’est pas une Double valeur. L’exemple suivant illustre la différence de comportement entre les deux surcharges de méthode. Dans le cas de tous les types numériques primitifs à l’exception Decimal de et en C#, la première comparaison est retournée true , car le compilateur effectue automatiquement une conversion étendue et appelle la Equals(Double) méthode, tandis que la deuxième comparaison retourne false parce que le compilateur appelle la Equals(Object) méthode.

C#
using System;

public class Example
{
   static double value = 112;

   public static void Main()
   {
      byte byte1= 112;
      Console.WriteLine("value = byte1: {0,16}", value.Equals(byte1));
      TestObjectForEquality(byte1);

      short short1 = 112;
      Console.WriteLine("value = short1: {0,16}", value.Equals(short1));
      TestObjectForEquality(short1);

      int int1 = 112;
      Console.WriteLine("value = int1: {0,18}", value.Equals(int1));
      TestObjectForEquality(int1);

      long long1 = 112;
      Console.WriteLine("value = long1: {0,17}", value.Equals(long1));
      TestObjectForEquality(long1);

      sbyte sbyte1 = 112;
      Console.WriteLine("value = sbyte1: {0,16}", value.Equals(sbyte1));
      TestObjectForEquality(sbyte1);

      ushort ushort1 = 112;
      Console.WriteLine("value = ushort1: {0,16}", value.Equals(ushort1));
      TestObjectForEquality(ushort1);

      uint uint1 = 112;
      Console.WriteLine("value = uint1: {0,18}", value.Equals(uint1));
      TestObjectForEquality(uint1);

      ulong ulong1 = 112;
      Console.WriteLine("value = ulong1: {0,17}", value.Equals(ulong1));
      TestObjectForEquality(ulong1);

      decimal dec1 = 112m;
      Console.WriteLine("value = dec1: {0,21}", value.Equals(dec1));
      TestObjectForEquality(dec1);

      float sng1 = 112;
      Console.WriteLine("value = sng1: {0,19}", value.Equals(sng1));
      TestObjectForEquality(sng1);
   }

   private static void TestObjectForEquality(Object obj)
   {
      Console.WriteLine("{0} ({1}) = {2} ({3}): {4}\n",
                        value, value.GetType().Name,
                        obj, obj.GetType().Name,
                        value.Equals(obj));
   }
}
// The example displays the following output:
//       value = byte1:             True
//       112 (Double) = 112 (Byte): False
//
//       value = short1:             True
//       112 (Double) = 112 (Int16): False
//
//       value = int1:               True
//       112 (Double) = 112 (Int32): False
//
//       value = long1:              True
//       112 (Double) = 112 (Int64): False
//
//       value = sbyte1:             True
//       112 (Double) = 112 (SByte): False
//
//       value = ushort1:             True
//       112 (Double) = 112 (UInt16): False
//
//       value = uint1:               True
//       112 (Double) = 112 (UInt32): False
//
//       value = ulong1:              True
//       112 (Double) = 112 (UInt64): False
//
//       value = dec1:                 False
//       112 (Double) = 112 (Decimal): False
//
//       value = sng1:                True
//       112 (Double) = 112 (Single): False

Voir aussi

S’applique à

.NET 10 et autres versions
Produit Versions
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Equals(Object)

Source:
Double.cs
Source:
Double.cs
Source:
Double.cs

Retourne une valeur indiquant si cette instance équivaut à un objet spécifié.

C#
public override bool Equals(object obj);
C#
public override bool Equals(object? obj);

Paramètres

obj
Object

Objet à comparer à cette instance.

Retours

true si obj est une instance de Double et est égal à la valeur de cette instance ; sinon, false.

Remarques

La Equals méthode doit être utilisée avec précaution, car deux valeurs apparemment équivalentes peuvent être inégales en raison de la précision différente des deux valeurs. L’exemple suivant indique que la Double valeur .3333 et la Double valeur retournée en divisant 1 par 3 sont inégales.

C#
// Initialize two doubles with apparently identical values
double double1 = .33333;
object double2 = (double) 1/3;
// Compare them for equality
Console.WriteLine(double1.Equals(double2));    // displays false

Pour obtenir des alternatives à l’appel de la Equals méthode, consultez la documentation relative à la Equals(Double) surcharge.

Note

Étant donné que Epsilon définit l’expression minimale d’une valeur positive dont la plage est proche de zéro, la marge de différence entre deux valeurs similaires doit être supérieure à Epsilon. En règle générale, il est plusieurs fois supérieur à Epsilon.

La précision des nombres à virgule flottante au-delà de la précision documentée est spécifique à l’implémentation et à la version du .NET Framework. Par conséquent, une comparaison de deux nombres particuliers peut changer entre les versions du .NET Framework, car la précision de la représentation interne des nombres peut changer.

Si deux Double.NaN valeurs sont testées pour l’égalité en appelant la Equals méthode , la méthode retourne true. Toutefois, si deux NaN valeurs sont testées pour l’égalité à l’aide de l’opérateur d’égalité, l’opérateur retourne false. Lorsque vous souhaitez déterminer si la valeur d’un Double n’est pas un nombre (NaN), une alternative consiste à appeler la IsNaN méthode .

Notes pour les appelants

La résolution des surcharges du compilateur peut tenir compte d’une différence apparente dans le comportement des deux Equals(Object) surcharges de méthode. Si une conversion implicite entre l’argument obj et un Double est définie et que l’argument n’est pas typé en tant que Object, les compilateurs peuvent effectuer une conversion implicite et appeler la Equals(Double) méthode . Sinon, ils appellent la Equals(Object) méthode , qui retourne false toujours si son obj argument n’est pas une Double valeur. L’exemple suivant illustre la différence de comportement entre les deux surcharges de méthode. Dans le cas de tous les types numériques primitifs à l’exception Decimal de et en C#, la première comparaison est retournée true , car le compilateur effectue automatiquement une conversion étendue et appelle la Equals(Double) méthode, tandis que la deuxième comparaison retourne false parce que le compilateur appelle la Equals(Object) méthode.

C#
using System;

public class Example
{
   static double value = 112;

   public static void Main()
   {
      byte byte1= 112;
      Console.WriteLine("value = byte1: {0,16}", value.Equals(byte1));
      TestObjectForEquality(byte1);

      short short1 = 112;
      Console.WriteLine("value = short1: {0,16}", value.Equals(short1));
      TestObjectForEquality(short1);

      int int1 = 112;
      Console.WriteLine("value = int1: {0,18}", value.Equals(int1));
      TestObjectForEquality(int1);

      long long1 = 112;
      Console.WriteLine("value = long1: {0,17}", value.Equals(long1));
      TestObjectForEquality(long1);

      sbyte sbyte1 = 112;
      Console.WriteLine("value = sbyte1: {0,16}", value.Equals(sbyte1));
      TestObjectForEquality(sbyte1);

      ushort ushort1 = 112;
      Console.WriteLine("value = ushort1: {0,16}", value.Equals(ushort1));
      TestObjectForEquality(ushort1);

      uint uint1 = 112;
      Console.WriteLine("value = uint1: {0,18}", value.Equals(uint1));
      TestObjectForEquality(uint1);

      ulong ulong1 = 112;
      Console.WriteLine("value = ulong1: {0,17}", value.Equals(ulong1));
      TestObjectForEquality(ulong1);

      decimal dec1 = 112m;
      Console.WriteLine("value = dec1: {0,21}", value.Equals(dec1));
      TestObjectForEquality(dec1);

      float sng1 = 112;
      Console.WriteLine("value = sng1: {0,19}", value.Equals(sng1));
      TestObjectForEquality(sng1);
   }

   private static void TestObjectForEquality(Object obj)
   {
      Console.WriteLine("{0} ({1}) = {2} ({3}): {4}\n",
                        value, value.GetType().Name,
                        obj, obj.GetType().Name,
                        value.Equals(obj));
   }
}
// The example displays the following output:
//       value = byte1:             True
//       112 (Double) = 112 (Byte): False
//
//       value = short1:             True
//       112 (Double) = 112 (Int16): False
//
//       value = int1:               True
//       112 (Double) = 112 (Int32): False
//
//       value = long1:              True
//       112 (Double) = 112 (Int64): False
//
//       value = sbyte1:             True
//       112 (Double) = 112 (SByte): False
//
//       value = ushort1:             True
//       112 (Double) = 112 (UInt16): False
//
//       value = uint1:               True
//       112 (Double) = 112 (UInt32): False
//
//       value = ulong1:              True
//       112 (Double) = 112 (UInt64): False
//
//       value = dec1:                 False
//       112 (Double) = 112 (Decimal): False
//
//       value = sng1:                True
//       112 (Double) = 112 (Single): False

Voir aussi

S’applique à

.NET 10 et autres versions
Produit Versions
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0