Bagikan melalui


Double.Equals Metode

Definisi

Mengembalikan nilai yang menunjukkan apakah dua instans Double mewakili nilai yang sama.

Overload

Equals(Double)

Mengembalikan nilai yang menunjukkan apakah instans ini dan objek tertentu Double mewakili nilai yang sama.

Equals(Object)

Mengembalikan nilai yang menunjukkan apakah instans ini sama dengan objek tertentu.

Equals(Double)

Sumber:
Double.cs
Sumber:
Double.cs
Sumber:
Double.cs

Mengembalikan nilai yang menunjukkan apakah instans ini dan objek tertentu Double mewakili nilai yang sama.

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

Parameter

obj
Double

Objek Double untuk dibandingkan dengan instans ini.

Mengembalikan

true jika obj sama dengan instans ini; jika tidak, false.

Penerapan

Keterangan

Untuk informasi selengkapnya tentang API ini, lihat Keterangan API Tambahan untuk Double.Equals.

Catatan Bagi Pemanggil

Resolusi kelebihan beban pengkompilasi dapat memperhitungkan perbedaan yang jelas dalam perilaku dua Equals(Object) metode kelebihan beban. Jika konversi implisit antara obj argumen dan didefinisikan Double dan argumen tidak ditik sebagai Object, pengkompilasi dapat melakukan konversi implisit dan memanggil Equals(Double) metode . Jika tidak, mereka memanggil Equals(Object) metode , yang selalu mengembalikan false jika argumennya obj bukan nilai Double . Contoh berikut mengilustrasikan perbedaan perilaku antara dua metode kelebihan beban. Dalam kasus semua jenis numerik primitif kecuali untuk Decimal dan dalam C#, perbandingan pertama kembali true karena pengompilasi secara otomatis melakukan konversi yang melebar dan memanggil Equals(Double) metode , sedangkan perbandingan kedua kembali false karena pengompilasi memanggil Equals(Object) metode .

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

Lihat juga

Berlaku untuk

Equals(Object)

Sumber:
Double.cs
Sumber:
Double.cs
Sumber:
Double.cs

Mengembalikan nilai yang menunjukkan apakah instans ini sama dengan objek tertentu.

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

Parameter

obj
Object

Objek untuk dibandingkan dengan instans ini.

Mengembalikan

true jika obj adalah instans dan Double sama dengan nilai instans ini; jika tidak, false.

Keterangan

Metode Equals ini harus digunakan dengan hati-hati, karena dua nilai yang tampaknya setara dapat tidak sama karena presisi yang berbeda dari dua nilai. Contoh berikut melaporkan bahwa Double nilai .3333 dan yang Double dikembalikan dengan memba lagi 1 dengan 3 tidak sama.

// 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

Untuk alternatif memanggil Equals metode , lihat dokumentasi untuk Equals(Double) kelebihan beban.

Catatan

Karena Epsilon mendefinisikan ekspresi minimum nilai positif yang rentangnya mendekati nol, margin selisih antara dua nilai serupa harus lebih besar dari Epsilon. Biasanya, berkali-kali lebih besar dari Epsilon.

Presisi angka floating-point di luar presisi yang didokumentasikan khusus untuk implementasi dan versi .NET Framework. Akibatnya, perbandingan dua angka tertentu mungkin berubah di antara versi .NET Framework karena presisi representasi internal angka mungkin berubah.

Jika dua Double.NaN nilai diuji untuk kesetaraan Equals dengan memanggil metode , metode mengembalikan true. Namun, jika dua NaN nilai diuji kesetaraannya dengan menggunakan operator kesetaraan, operator mengembalikan false. Ketika Anda ingin menentukan apakah nilai Double bukan angka (NaN), alternatifnya adalah memanggil IsNaN metode .

Catatan Bagi Pemanggil

Resolusi kelebihan beban pengkompilasi dapat memperhitungkan perbedaan yang jelas dalam perilaku dua Equals(Object) metode kelebihan beban. Jika konversi implisit antara obj argumen dan didefinisikan Double dan argumen tidak ditik sebagai Object, pengkompilasi dapat melakukan konversi implisit dan memanggil Equals(Double) metode . Jika tidak, mereka memanggil Equals(Object) metode , yang selalu mengembalikan false jika argumennya obj bukan nilai Double . Contoh berikut mengilustrasikan perbedaan perilaku antara dua metode kelebihan beban. Dalam kasus semua jenis numerik primitif kecuali untuk Decimal dan dalam C#, perbandingan pertama kembali true karena pengompilasi secara otomatis melakukan konversi yang melebar dan memanggil Equals(Double) metode , sedangkan perbandingan kedua kembali false karena pengompilasi memanggil Equals(Object) metode .

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

Lihat juga

Berlaku untuk