Ler em inglês

Compartilhar via


Double.Equals Método

Definição

Retorna um valor que indica se duas instâncias de Double representam o mesmo valor.

Sobrecargas

Equals(Double)

Retorna um valor que indica se essa instância e um objeto Double especificado representam o mesmo valor.

Equals(Object)

Retorna um valor que indica se a instância é igual a um objeto especificado.

Equals(Double)

Origem:
Double.cs
Origem:
Double.cs
Origem:
Double.cs

Retorna um valor que indica se essa instância e um objeto Double especificado representam o mesmo valor.

C#
public bool Equals(double obj);

Parâmetros

obj
Double

Um objeto Double para comparação com essa instância.

Retornos

true se obj for igual a essa instância; caso contrário, false.

Implementações

Comentários

Para obter mais informações sobre essa API, consulte Comentários de API complementares para Double.Equals.

Notas aos Chamadores

A resolução de sobrecarga do compilador pode levar em conta uma diferença aparente no comportamento das duas Equals(Object) sobrecargas de método. Se uma conversão implícita entre o obj argumento e um Double for definida e o argumento não for digitado como um Object, os compiladores poderão executar uma conversão implícita e chamar o Equals(Double) método . Caso contrário, eles chamam o Equals(Object) método , que sempre retorna false se seu obj argumento não for um Double valor. O exemplo a seguir ilustra a diferença de comportamento entre as duas sobrecargas de método. No caso de todos os tipos numéricos primitivos, exceto e Decimal em C#, a primeira comparação retorna true porque o compilador executa automaticamente uma conversão de ampliação e chama o Equals(Double) método, enquanto a segunda comparação retorna false porque o compilador chama o Equals(Object) método .

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

Confira também

Aplica-se a

.NET 10 e outras versões
Produto Versões
.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)

Origem:
Double.cs
Origem:
Double.cs
Origem:
Double.cs

Retorna um valor que indica se a instância é igual a um objeto especificado.

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

Parâmetros

obj
Object

Um objeto a ser comparado com essa instância.

Retornos

true se obj é uma instância de Double e é igual ao valor dessa instância; caso contrário, false.

Comentários

O Equals método deve ser usado com cuidado, pois dois valores aparentemente equivalentes podem ser diferentes devido à precisão diferente dos dois valores. O exemplo a seguir relata que o Double valor .3333 e o Double retornado dividindo 1 por 3 são diferentes.

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

Para obter alternativas para chamar o Equals método, consulte a documentação para a Equals(Double) sobrecarga.

Observação

Como Epsilon define a expressão mínima de um valor positivo cujo intervalo é próximo de zero, a margem de diferença entre dois valores semelhantes deve ser maior que Epsilon. Normalmente, ele é muitas vezes maior que Epsilon.

A precisão dos números de ponto flutuante além da precisão documentada é específica da implementação e da versão do .NET Framework. Consequentemente, uma comparação entre dois números específicos pode mudar entre versões do .NET Framework porque a precisão da representação interna dos números pode mudar.

Se dois Double.NaN valores forem testados quanto à igualdade chamando o Equals método , o método retornará true. No entanto, se dois NaN valores forem testados quanto à igualdade usando o operador de igualdade, o operador retornará false. Quando você deseja determinar se o valor de um Double não é um número (NaN), uma alternativa é chamar o IsNaN método .

Notas aos Chamadores

A resolução de sobrecarga do compilador pode levar em conta uma diferença aparente no comportamento das duas Equals(Object) sobrecargas de método. Se uma conversão implícita entre o obj argumento e um Double for definida e o argumento não for digitado como um Object, os compiladores poderão executar uma conversão implícita e chamar o Equals(Double) método . Caso contrário, eles chamam o Equals(Object) método , que sempre retorna false se seu obj argumento não for um Double valor. O exemplo a seguir ilustra a diferença de comportamento entre as duas sobrecargas de método. No caso de todos os tipos numéricos primitivos, exceto e Decimal em C#, a primeira comparação retorna true porque o compilador executa automaticamente uma conversão de ampliação e chama o Equals(Double) método, enquanto a segunda comparação retorna false porque o compilador chama o Equals(Object) método .

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

Confira também

Aplica-se a

.NET 10 e outras versões
Produto Versões
.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