Double.Equals Yöntem

Tanım

İki örneğinin Double aynı değeri temsil edip etmediğini gösteren bir değer döndürür.

Aşırı Yüklemeler

Equals(Double)

Bu örneğin ve belirtilen Double nesnenin aynı değeri temsil edip etmediğini belirten bir değer döndürür.

Equals(Object)

Bu örneğin, belirtilen bir nesneye eşit olup olmadığını gösteren bir değeri döndürür.

Equals(Double)

Kaynak:
Double.cs
Kaynak:
Double.cs
Kaynak:
Double.cs

Bu örneğin ve belirtilen Double nesnenin aynı değeri temsil edip etmediğini belirten bir değer döndürür.

public:
 virtual bool Equals(double obj);
public bool Equals (double obj);
override this.Equals : double -> bool
Public Function Equals (obj As Double) As Boolean

Parametreler

obj
Double

Double Bu örnekle karşılaştıracak bir nesne.

Döndürülenler

true bu örneğe eşitse; eşit değilse obj , false.

Uygulamalar

Açıklamalar

Bu API hakkında daha fazla bilgi için bkz. Double.Equals için ek API açıklamaları.

Arayanlara Notlar

Derleyici aşırı yükleme çözümlemesi, iki Equals(Object) yöntem aşırı yüklemesinin davranışında belirgin bir farka neden olabilir. bağımsız değişkeni ile Double arasında obj örtük bir dönüştürme tanımlanmışsa ve bağımsız değişken olarak Objectyazılmazsa, derleyiciler örtük bir dönüştürme gerçekleştirebilir ve yöntemini çağırabilirEquals(Double). Aksi takdirde, bağımsız değişkeni bir değer değilse obj her zaman döndüren false yöntemini çağırırlarEquals(Object).Double Aşağıdaki örnekte iki yöntem aşırı yüklemesi arasındaki davranış farkı gösterilmektedir. C# içinde ve dışında tüm temel sayısal türler söz konusu olduğunda, derleyici otomatik olarak bir genişletme dönüştürmesi gerçekleştirip yöntemini çağırdığı için Decimal ilk karşılaştırma döndürülürkentrue, derleyici yöntemini çağırdığı Equals(Object) için ikinci karşılaştırma döndürülür falseEquals(Double).

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
let value = 112

let testObjectForEquality (obj: obj) =
    printfn $"{value} ({value.GetType().Name}) = {obj} ({obj.GetType().Name}): {value.Equals obj}\n"

let byte1 = 112uy
printfn $"value = byte1: {value.Equals byte1,16}"
testObjectForEquality byte1

let short1 = 112s
printfn $"value = short1: {value.Equals short1,16}"
testObjectForEquality short1

let int1 = 112
printfn $"value = int1: {value.Equals int1,18}"
testObjectForEquality int1

let long1 = 112L
printfn $"value = long1: {value.Equals long1,17}"
testObjectForEquality long1

let sbyte1 = 112y
printfn $"value = sbyte1: {value.Equals sbyte1,16}"
testObjectForEquality sbyte1

let ushort1 = 112us
printfn $"value = ushort1: {value.Equals ushort1,16}"
testObjectForEquality ushort1

let uint1 = 112u
printfn $"value = uint1: {value.Equals uint1,18}"
testObjectForEquality uint1

let ulong1 = 112uL
printfn $"value = ulong1: {value.Equals ulong1,17}"
testObjectForEquality ulong1

let dec1 = 112m
printfn $"value = dec1: {value.Equals dec1,21}"
testObjectForEquality dec1

let sng1 = 112f
printfn $"value = sng1: {value.Equals sng1,19}"
testObjectForEquality sng1

// 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
Module Example
   Dim value As Double = 112
   
   Public Sub Main()
      Dim byte1 As Byte = 112
      Console.WriteLine("value = byte1: {0,16}", value.Equals(byte1))
      TestObjectForEquality(byte1)
      
      Dim short1 As Short = 112
      Console.WriteLine("value = short1: {0,16}", value.Equals(short1))
      TestObjectForEquality(short1)

      Dim int1 As Integer = 112
      Console.WriteLine("value = int1: {0,18}", value.Equals(int1))
      TestObjectForEquality(int1)

      Dim long1 As Long = 112
      Console.WriteLine("value = long1: {0,17}", value.Equals(long1))
      TestObjectForEquality(long1)

      Dim sbyte1 As SByte = 112
      Console.WriteLine("value = sbyte1: {0,16}", value.Equals(sbyte1))
      TestObjectForEquality(sbyte1)
      
      Dim ushort1 As UShort = 112
      Console.WriteLine("value = ushort1: {0,16}", value.Equals(ushort1))
      TestObjectForEquality(ushort1)

      Dim uint1 As UInteger = 112
      Console.WriteLine("value = uint1: {0,18}", value.Equals(uint1))
      TestObjectForEquality(uint1)

      Dim ulong1 As ULong = 112
      Console.WriteLine("value = ulong1: {0,17}", value.Equals(ulong1))
      TestObjectForEquality(ulong1)
      
      Dim dec1 As Decimal = 112d
      Console.WriteLine("value = dec1: {0,20}", value.Equals(dec1))
      TestObjectForEquality(dec1)

      Dim sng1 As Single = 112
      Console.WriteLine("value = sng1: {0,19}", value.Equals(sng1))
      TestObjectForEquality(sng1)
   End Sub
   
   Private Sub TestObjectForEquality(obj As Object)
      Console.WriteLine("{0} ({1}) = {2} ({3}): {4}",
                        value, value.GetType().Name,
                        obj, obj.GetType().Name,
                        value.Equals(obj))
      Console.WriteLine()
   End Sub
End Module
' 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:                 True
'       112 (Double) = 112 (Decimal): False
'
'       value = sng1:                True
'       112 (Double) = 112 (Single): False

Ayrıca bkz.

Şunlara uygulanır

Equals(Object)

Kaynak:
Double.cs
Kaynak:
Double.cs
Kaynak:
Double.cs

Bu örneğin, belirtilen bir nesneye eşit olup olmadığını gösteren bir değeri döndürür.

public:
 override bool Equals(System::Object ^ obj);
public override bool Equals (object obj);
public override bool Equals (object? obj);
override this.Equals : obj -> bool
Public Overrides Function Equals (obj As Object) As Boolean

Parametreler

obj
Object

Bu örnekle karşılaştırılacak bir nesne.

Döndürülenler

trueörneğiyse Double ve bu örneğin değerine eşitseobj; değilse, false.

Açıklamalar

yöntemi Equals dikkatli kullanılmalıdır, çünkü iki değerin farklı duyarlığı nedeniyle görünüşte eşdeğer iki değer eşit olmayabilir. Aşağıdaki örnek, .3333 değerinin Double ve 1'i 3'e bölerek döndürülen değerinin Double eşit olmadığını bildirir.

// 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
// Initialize two doubles with apparently identical values
let double1 = 0.33333
let double2 = double (1 / 3) |> box
// Compare them for equality
printfn $"{double1.Equals double2}"    // displays false
' Initialize two doubles with apparently identical values
Dim double1 As Double = .33333
Dim double2 As Object = 1/3
' Compare them for equality
Console.WriteLine(double1.Equals(double2))    ' displays False

yöntemini çağırmanın Equals alternatifleri için aşırı yükleme belgelerine Equals(Double) bakın.

Not

Epsilon Aralığı sıfıra yakın olan pozitif bir değerin minimum ifadesini tanımladığından, iki benzer değer arasındaki farkın kenar boşluğu değerinden Epsilonbüyük olmalıdır. Genellikle, değerinden birçok kez daha Epsilonbüyüktür.

Kayan noktalı sayıların, belgelenen kesinliğin ötesinde duyarlığı, uygulamaya ve .NET Framework sürümüne özeldir. Sonuç olarak, belirli iki sayının karşılaştırılması, numaraları iç gösteriminin duyarlılığı değişebileceğinden .NET Framework sürümleri arasında değişebilir.

İki Double.NaN değer yöntemi çağrılarak Equals eşitlik açısından test edilirse, yöntemi döndürür true. Ancak, iki NaN değer eşitlik işleci kullanılarak eşitlik için test edilirse, işleç döndürür false. değerinin Double sayı (NaN) olup olmadığını belirlemek istediğinizde, alternatif yöntem çağırmaktır IsNaN .

Arayanlara Notlar

Derleyici aşırı yükleme çözümlemesi, iki Equals(Object) yöntem aşırı yüklemesinin davranışında belirgin bir farka neden olabilir. bağımsız değişkeni ile Double arasında obj örtük bir dönüştürme tanımlanmışsa ve bağımsız değişken olarak Objectyazılmazsa, derleyiciler örtük bir dönüştürme gerçekleştirebilir ve yöntemini çağırabilirEquals(Double). Aksi takdirde, bağımsız değişkeni bir değer değilse obj her zaman döndüren false yöntemini çağırırlarEquals(Object).Double Aşağıdaki örnekte iki yöntem aşırı yüklemesi arasındaki davranış farkı gösterilmektedir. C# içinde ve dışında tüm temel sayısal türler söz konusu olduğunda, derleyici otomatik olarak bir genişletme dönüştürmesi gerçekleştirip yöntemini çağırdığı için Decimal ilk karşılaştırma döndürülürkentrue, derleyici yöntemini çağırdığı Equals(Object) için ikinci karşılaştırma döndürülür falseEquals(Double).

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
let value = 112

let testObjectForEquality (obj: obj) =
    printfn $"{value} ({value.GetType().Name}) = {obj} ({obj.GetType().Name}): {value.Equals obj}\n"

let byte1 = 112uy
printfn $"value = byte1: {value.Equals byte1,16}"
testObjectForEquality byte1

let short1 = 112s
printfn $"value = short1: {value.Equals short1,16}"
testObjectForEquality short1

let int1 = 112
printfn $"value = int1: {value.Equals int1,18}"
testObjectForEquality int1

let long1 = 112L
printfn $"value = long1: {value.Equals long1,17}"
testObjectForEquality long1

let sbyte1 = 112y
printfn $"value = sbyte1: {value.Equals sbyte1,16}"
testObjectForEquality sbyte1

let ushort1 = 112us
printfn $"value = ushort1: {value.Equals ushort1,16}"
testObjectForEquality ushort1

let uint1 = 112u
printfn $"value = uint1: {value.Equals uint1,18}"
testObjectForEquality uint1

let ulong1 = 112uL
printfn $"value = ulong1: {value.Equals ulong1,17}"
testObjectForEquality ulong1

let dec1 = 112m
printfn $"value = dec1: {value.Equals dec1,21}"
testObjectForEquality dec1

let sng1 = 112f
printfn $"value = sng1: {value.Equals sng1,19}"
testObjectForEquality sng1

// 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
Module Example
   Dim value As Double = 112
   
   Public Sub Main()
      Dim byte1 As Byte = 112
      Console.WriteLine("value = byte1: {0,16}", value.Equals(byte1))
      TestObjectForEquality(byte1)
      
      Dim short1 As Short = 112
      Console.WriteLine("value = short1: {0,16}", value.Equals(short1))
      TestObjectForEquality(short1)

      Dim int1 As Integer = 112
      Console.WriteLine("value = int1: {0,18}", value.Equals(int1))
      TestObjectForEquality(int1)

      Dim long1 As Long = 112
      Console.WriteLine("value = long1: {0,17}", value.Equals(long1))
      TestObjectForEquality(long1)

      Dim sbyte1 As SByte = 112
      Console.WriteLine("value = sbyte1: {0,16}", value.Equals(sbyte1))
      TestObjectForEquality(sbyte1)
      
      Dim ushort1 As UShort = 112
      Console.WriteLine("value = ushort1: {0,16}", value.Equals(ushort1))
      TestObjectForEquality(ushort1)

      Dim uint1 As UInteger = 112
      Console.WriteLine("value = uint1: {0,18}", value.Equals(uint1))
      TestObjectForEquality(uint1)

      Dim ulong1 As ULong = 112
      Console.WriteLine("value = ulong1: {0,17}", value.Equals(ulong1))
      TestObjectForEquality(ulong1)
      
      Dim dec1 As Decimal = 112d
      Console.WriteLine("value = dec1: {0,20}", value.Equals(dec1))
      TestObjectForEquality(dec1)

      Dim sng1 As Single = 112
      Console.WriteLine("value = sng1: {0,19}", value.Equals(sng1))
      TestObjectForEquality(sng1)
   End Sub
   
   Private Sub TestObjectForEquality(obj As Object)
      Console.WriteLine("{0} ({1}) = {2} ({3}): {4}",
                        value, value.GetType().Name,
                        obj, obj.GetType().Name,
                        value.Equals(obj))
      Console.WriteLine()
   End Sub
End Module
' 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:                 True
'       112 (Double) = 112 (Decimal): False
'
'       value = sng1:                True
'       112 (Double) = 112 (Single): False

Ayrıca bkz.

Şunlara uygulanır