Double.Equals Metode
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Mengembalikan nilai yang menunjukkan apakah dua instans Double mewakili nilai yang sama.
Overload
| Nama | Deskripsi |
|---|---|
| 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
- 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
Mengembalikan
true jika obj sama dengan instans ini; jika tidak, false.
Penerapan
Keterangan
Metode ini Double.Equals(Double) mengimplementasikan System.IEquatable<T> antarmuka, dan berkinerja sedikit lebih baik daripada Double.Equals(Object) karena tidak harus mengonversi obj parameter menjadi objek.
Konversi meluas
Bergantung pada bahasa pemrograman Anda, mungkin untuk mengimplementasikan metode Equals di mana tipe parameter memiliki bit lebih sedikit (lebih sempit) daripada tipe instance. Hal ini dimungkinkan karena beberapa bahasa pemrograman melakukan konversi pelebaran implisit yang mewakili parameter sebagai tipe dengan jumlah bit yang sama banyaknya dengan instans.
Misalnya, misalkan jenis instans adalah Double dan jenis parameternya adalah Int32. Pengkompilasi Microsoft C# menghasilkan instruksi untuk mewakili nilai parameter sebagai objek Double, lalu menghasilkan metode Double.Equals(Double) yang membandingkan nilai instans dan representasi parameter yang diperlebar.
Lihat dokumentasi bahasa pemrograman Anda untuk menentukan apakah pengkompilasinya melakukan konversi tipe numerik yang melebar implisit. Untuk informasi selengkapnya, lihat Topik Tabel Konversi Tipe.
Presisi dalam perbandingan
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 nilai Double .333333 dan nilai Double yang dikembalikan dengan membagi 1 dengan 3 tidak sama.
// Initialize two doubles with apparently identical values
double double1 = .33333;
double 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)
// 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 Double = 1/3
' Compare them for equality
Console.WriteLine(double1.Equals(double2)) ' displays False
Daripada membandingkan kesetaraan, satu teknik melibatkan penentuan margin relatif selisih yang dapat diterima antara dua nilai (seperti .001% dari salah satu nilai). Jika nilai absolut perbedaan antara kedua nilai kurang dari atau sama dengan margin tersebut, perbedaannya kemungkinan disebabkan oleh perbedaan presisi dan, oleh karena itu, nilainya kemungkinan sama. Contoh berikut menggunakan teknik ini untuk membandingkan .33333 dan 1/3, dua Double nilai yang ditemukan contoh kode sebelumnya tidak sama. Dalam hal ini, nilainya sama.
// Initialize two doubles with apparently identical values
double double1 = .333333;
double double2 = (double) 1/3;
// Define the tolerance for variation in their values
double difference = Math.Abs(double1 * .00001);
// Compare the values
// The output to the console indicates that the two values are equal
if (Math.Abs(double1 - double2) <= difference)
Console.WriteLine("double1 and double2 are equal.");
else
Console.WriteLine("double1 and double2 are unequal.");
// Initialize two doubles with apparently identical values
let double1 = 0.333333
let double2 = double (1 / 3)
// Define the tolerance for variation in their values
let difference = abs (double1 * 0.00001)
// Compare the values
// The output to the console indicates that the two values are equal
if abs (double1 - double2) <= difference then
printfn "double1 and double2 are equal."
else
printfn "double1 and double2 are unequal."
' Initialize two doubles with apparently identical values
Dim double1 As Double = .33333
Dim double2 As Double = 1/3
' Define the tolerance for variation in their values
Dim difference As Double = Math.Abs(double1 * .00001)
' Compare the values
' The output to the console indicates that the two values are equal
If Math.Abs(double1 - double2) <= difference Then
Console.WriteLine("double1 and double2 are equal.")
Else
Console.WriteLine("double1 and double2 are unequal.")
End If
Note
Karena Epsilon mendefinisikan ekspresi minimum dari nilai positif yang rentangnya mendekati nol, margin selisih antara dua nilai serupa harus lebih besar dari Epsilon. Biasanya, berkali-kali lebih besar dari Epsilon. Karena itu, kami sarankan Anda tidak menggunakan Epsilon saat membandingkan Double nilai untuk kesetaraan.
Teknik kedua melibatkan perbandingan perbedaan antara dua bilangan floating-point dengan nilai absolut tertentu. Jika perbedaannya kurang dari atau sama dengan nilai absolut tersebut, angkanya sama. Jika lebih besar, angkanya tidak sama. Salah satu alternatifnya adalah dengan memilih nilai absolut secara arbitrer. Namun, itu bermasalah karena margin perbedaan yang dapat diterima tergantung pada besarnya Double nilai. Alternatif kedua memanfaatkan fitur desain format floating-point: Perbedaan antara representasi bilangan bulat dari dua nilai floating-point menunjukkan jumlah kemungkinan nilai floating-point yang memisahkannya. Misalnya, perbedaan antara 0,0 dan Epsilon adalah 1, karena Epsilon adalah nilai terkecil yang dapat diwakili saat bekerja dengan Double yang nilainya nol. Contoh berikut menggunakan teknik ini untuk membandingkan .33333 dan 1/3, yang merupakan dua nilai Double yang ditemukan oleh metode Equals(Double) dalam contoh kode sebelumnya sebagai tidak sama. Contoh menggunakan metode BitConverter.DoubleToInt64Bits untuk mengonversi nilai floating-point presisi ganda ke dalam representasi bilangan bulatnya. Contoh mendeklarasikan nilai sebagai sama jika tidak ada kemungkinan nilai floating-point di antara representasi bilangan bulatnya.
public static void Main()
{
// Initialize the values.
double value1 = .1 * 10;
double value2 = 0;
for (int ctr = 0; ctr < 10; ctr++)
value2 += .1;
Console.WriteLine($"{value1:R} = {value2:R}: " +
$"{HasMinimalDifference(value1, value2, 1)}");
}
public static bool HasMinimalDifference(
double value1,
double value2,
int allowableDifference
)
{
// Convert the double values to long values.
long lValue1 = BitConverter.DoubleToInt64Bits(value1);
long lValue2 = BitConverter.DoubleToInt64Bits(value2);
// If the signs are different, return false except for +0 and -0.
if ((lValue1 >> 63) != (lValue2 >> 63))
{
if (value1 == value2)
return true;
return false;
}
// Calculate the number of possible
// floating-point values in the difference.
long diff = Math.Abs(lValue1 - lValue2);
if (diff <= allowableDifference)
return true;
return false;
}
// The example displays the following output:
//
// 1 = 0.99999999999999989: True
open System
let hasMinimalDifference (value1: double) (value2: double) (units: int) =
let lValue1 = BitConverter.DoubleToInt64Bits value1
let lValue2 = BitConverter.DoubleToInt64Bits value2
// If the signs are different, return false except for +0 and -0.
if (lValue1 >>> 63) <> (lValue2 >>> 63) then
value1 = value2
else
let diff = abs (lValue1 - lValue2)
diff <= int64 units
let value1 = 0.1 * 10.
let mutable value2 = 0.
for _ = 0 to 9 do
value2 <- value2 + 0.1
printfn $"{value1:R} = {value2:R}: {hasMinimalDifference value1 value2 1}"
// The example displays the following output:
// 1 = 0.99999999999999989: True
Module Example1
Public Sub Main()
Dim value1 As Double = .1 * 10
Dim value2 As Double = 0
For ctr As Integer = 0 To 9
value2 += .1
Next
Console.WriteLine("{0:R} = {1:R}: {2}", value1, value2,
HasMinimalDifference(value1, value2, 1))
End Sub
Public Function HasMinimalDifference(value1 As Double, value2 As Double, units As Integer) As Boolean
Dim lValue1 As long = BitConverter.DoubleToInt64Bits(value1)
Dim lValue2 As long = BitConverter.DoubleToInt64Bits(value2)
' If the signs are different, Return False except for +0 and -0.
If ((lValue1 >> 63) <> (lValue2 >> 63)) Then
If value1 = value2 Then
Return True
End If
Return False
End If
Dim diff As Long = Math.Abs(lValue1 - lValue2)
If diff <= units Then
Return True
End If
Return False
End Function
End Module
' The example displays the following output:
' 1 = 0.99999999999999989: True
Note
Untuk beberapa nilai, Anda mungkin menganggapnya sama walaupun terdapat kemungkinan nilai floating-point di antara representasi bilangan bulat. Misalnya, pertimbangkan nilai 0.39 ganda dan 1.69 - 1.3 (yang dihitung sebagai 0.3899999999999999). Pada komputer little-endian, representasi bilangan bulat dari nilai-nilai ini adalah masing-masing 4600697235336603894 dan 4600697235336603892. Perbedaan antara nilai bilangan bulat adalah 2, yang berarti ada kemungkinan nilai floating-point antara 0.39 dan 1.69 - 1.3.
Perbedaan versi
Presisi angka floating-point yang melebihi presisi terdokumentasi bergantung pada implementasi dan versi .NET. Akibatnya, perbandingan dua angka tertentu mungkin berubah di antara versi .NET karena presisi representasi internal angka mungkin berubah.
BkA
Jika dua nilai Double.NaN diuji untuk kesetaraan dengan memanggil metode Equals, metode mengembalikan true. Namun, jika dua Double.NaN nilai diuji untuk kesetaraan 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 kompilator 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 di ketik 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 dan Decimal 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 kompilator memanggil Equals(Object) metode .
using System;
public class OverExample
{
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 Example2
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
- 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 Double dan 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 nilai Double .3333 dan Double yang dikembalikan dengan membagi 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.
Note
Karena Epsilon mendefinisikan ekspresi minimum dari 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 antara versi kerangka kerja .NET karena presisi representasi internal angka mungkin berubah.
Jika dua nilai Double.NaN diuji untuk kesetaraan dengan memanggil metode Equals, metode mengembalikan true. Namun, jika dua NaN nilai diuji untuk kesetaraan 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 kompilator 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 di ketik 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 dan Decimal 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 kompilator memanggil Equals(Object) metode .
using System;
public class OverExample
{
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 Example2
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