英語で読む

次の方法で共有


Double.Equals メソッド

定義

Double の 2 つのインスタンスが同じ値を表しているかどうかを示す値を返します。

オーバーロード

Equals(Double)

このインスタンスと指定した Double オブジェクトが同じ値を表しているかどうかを示す値を返します。

Equals(Object)

このインスタンスが指定されたオブジェクトに等しいかどうかを示す値を返します。

Equals(Double)

ソース:
Double.cs
ソース:
Double.cs
ソース:
Double.cs

このインスタンスと指定した Double オブジェクトが同じ値を表しているかどうかを示す値を返します。

C#
public bool Equals(double obj);

パラメーター

obj
Double

このインスタンスと比較する Double オブジェクト。

戻り値

obj がこのインスタンスと等しい場合は true。それ以外の場合は false

実装

注釈

この API の詳細については、「 Double.Equals の補足 API 解説」を参照してください。

注意 (呼び出し元)

コンパイラ のオーバーロード解決では、2 つの Equals(Object) メソッド オーバーロードの動作の明らかな違いが考慮される場合があります。 引数と Double の間のobj暗黙的な変換が定義されていて、 引数が としてObject型指定されていない場合、コンパイラは暗黙的な変換を実行し、 メソッドをEquals(Double)呼び出す可能性があります。 それ以外の場合は、 メソッドをEquals(Object)呼び出します。これは、引数がobj値でない場合は常に をDoublefalseします。 次の例は、2 つのメソッド オーバーロード間の動作の違いを示しています。 C# を除くDecimalすべてのプリミティブ数値型の場合、コンパイラtrueが拡大変換を自動的に実行して メソッドを呼び出すのに対し、2 番目の比較では コンパイラが メソッドを呼び出Equals(Double)Equals(Object)すので、最初の比較は を返falseします。

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

こちらもご覧ください

適用対象

.NET 10 およびその他のバージョン
製品 バージョン
.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)

ソース:
Double.cs
ソース:
Double.cs
ソース:
Double.cs

このインスタンスが指定されたオブジェクトに等しいかどうかを示す値を返します。

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

パラメーター

obj
Object

このインスタンスと比較するオブジェクト。

戻り値

objDouble のインスタンスで、このインスタンスの値に等しい場合は true。それ以外の場合は false

注釈

メソッドは Equals 、2 つの値の精度が異なるため、2 つの明らかに同等の値が等しくない可能性があるため、注意して使用する必要があります。 次の例では、 Double 値 .3333 と Double 1 を 3 で除算して返される が等しくないと報告しています。

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

メソッドを呼び出す Equals 代わりに、オーバーロードのドキュメントを Equals(Double) 参照してください。

注意

範囲が 0 に近い正の値の最小式を定義するため Epsilon 、2 つの同様の値の差の余白は を超える Epsilon必要があります。 通常は、 よりも Epsilon何倍も大きくなります。

文書化された有効桁数を超える浮動小数点数の有効桁数は、.NET Frameworkの実装とバージョンに固有です。 したがって、数値の内部表現の精度が変わる可能性があるため、2 つの特定の数値の比較は、.NET Frameworkのバージョン間で変更される可能性があります。

メソッドを呼び出Equalsして 2 つのDouble.NaN値が等しいかどうかをテストすると、 メソッドは を返しますtrue。 ただし、等値演算子を使用して 2 つの NaN 値が等しいかどうかをテストする場合、演算子は を返します false。 の Double 値が数値 (NaN) でないかどうかを判断する場合は、 メソッドを IsNaN 呼び出す方法があります。

注意 (呼び出し元)

コンパイラ のオーバーロード解決では、2 つの Equals(Object) メソッド オーバーロードの動作の明らかな違いが考慮される場合があります。 引数と Double の間のobj暗黙的な変換が定義されていて、 引数が としてObject型指定されていない場合、コンパイラは暗黙的な変換を実行し、 メソッドをEquals(Double)呼び出す可能性があります。 それ以外の場合は、 メソッドをEquals(Object)呼び出します。これは、引数がobj値でない場合は常に をDoublefalseします。 次の例は、2 つのメソッド オーバーロード間の動作の違いを示しています。 C# を除くDecimalすべてのプリミティブ数値型の場合、コンパイラtrueが拡大変換を自動的に実行して メソッドを呼び出すのに対し、2 番目の比較では コンパイラが メソッドを呼び出Equals(Double)Equals(Object)すので、最初の比較は を返falseします。

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

こちらもご覧ください

適用対象

.NET 10 およびその他のバージョン
製品 バージョン
.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