Double.Equals 方法 
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
返回一个值,该值指示 Double 的两个实例是否表示同一个值。
重载
| Equals(Double) | 返回一个值,该值指示此实例和指定的 Double 对象是否表示相同的值。 | 
| Equals(Object) | 返回一个值,该值指示此实例是否等于指定的对象。 | 
Equals(Double)
- Source:
- Double.cs
- Source:
- Double.cs
- Source:
- Double.cs
- Source:
- Double.cs
返回一个值,该值指示此实例和指定的 Double 对象是否表示相同的值。
public:
 virtual bool Equals(double obj);public bool Equals(double obj);override this.Equals : double -> boolPublic Function Equals (obj As Double) As Boolean参数
返回
如果 true 与此实例相等,则为 obj;否则为 false。
实现
注解
有关此 API 的详细信息,请参阅 Double.Equals 的补充 API 备注。
调用方说明
编译器重载解析可能导致两 Equals(Object) 个方法重载的行为存在明显差异。 如果定义了 参数和 Double 之间的obj隐式转换,并且未将参数类型化为 Object,编译器可能会执行隐式转换并调用 Equals(Double) 方法。 否则,它们会调用 Equals(Object) 方法,如果其obj参数不是Double值,则该方法始终返回 false 。 以下示例说明了两个方法重载之间的行为差异。 对于 C# 中除 和 之外 Decimal 的所有基元数值类型,第一个比较返回 true 是因为编译器自动执行扩大转换并调用 Equals(Double) 方法,而第二个比较返回 false 是因为编译器调用 Equals(Object) 方法。
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
另请参阅
适用于
Equals(Object)
- Source:
- Double.cs
- Source:
- Double.cs
- Source:
- Double.cs
- Source:
- Double.cs
返回一个值,该值指示此实例是否等于指定的对象。
public:
 override bool Equals(System::Object ^ obj);public override bool Equals(object obj);public override bool Equals(object? obj);override this.Equals : obj -> boolPublic Overrides Function Equals (obj As Object) As Boolean参数
- obj
- Object
与此实例进行比较的对象。
返回
如果 true 是 obj 的实例并且等于此实例的值,则为 Double;否则为 false。
注解
Equals应谨慎使用 方法,因为由于两个值的精度不同,两个明显等效的值可能不相等。 以下示例报告 Double 值 .3333 和 Double 通过除以 1 除 3 返回的 是不相等的。
// 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
有关调用 方法的 Equals 替代方法,请参阅重载的文档 Equals(Double) 。
超过记录精度的浮点数的精度特定于.NET Framework的实现和版本。 因此,两个特定数字的比较可能会在.NET Framework版本之间更改,因为数字的内部表示形式的精度可能会更改。
如果通过调用 Equals 方法测试两Double.NaN个值的相等性,该方法将true返回 。 但是,如果使用相等运算符测试两 NaN 个值的相等性,则 运算符返回 false。 如果要确定 的值 Double 是否不是 naN)  (数字,另一种方法是调用 IsNaN 方法。
调用方说明
编译器重载解析可能导致两 Equals(Object) 个方法重载的行为存在明显差异。 如果定义了 参数和 Double 之间的obj隐式转换,并且未将参数类型化为 Object,编译器可能会执行隐式转换并调用 Equals(Double) 方法。 否则,它们会调用 Equals(Object) 方法,如果其obj参数不是Double值,则该方法始终返回 false 。 以下示例说明了两个方法重载之间的行为差异。 对于 C# 中除 和 之外 Decimal 的所有基元数值类型,第一个比较返回 true 是因为编译器自动执行扩大转换并调用 Equals(Double) 方法,而第二个比较返回 false 是因为编译器调用 Equals(Object) 方法。
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