英語で読む

次の方法で共有


Single.Equals メソッド

定義

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

オーバーロード

Equals(Object)

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

Equals(Single)

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

Equals(Object)

ソース:
Single.cs
ソース:
Single.cs
ソース:
Single.cs

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

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

パラメーター

obj
Object

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

戻り値

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

次のコード例は、 メソッドを Equals 示しています。

C#
obj1 = (Single)500;
if (a.Equals(obj1)) {
    Console.WriteLine("The value type and reference type values are equal.");
}

注釈

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

C#
// Initialize two floats with apparently identical values
float float1 = .33333f;
object float2 = 1/3;
// Compare them for equality
Console.WriteLine(float1.Equals(float2));    // displays false

等価性を比較するのではなく、1 つの推奨される手法では、2 つの値の差の許容できるマージン (値の 1 つの .01% など) を定義する必要があります。 2 つの値の差の絶対値がその余白以下の場合、その差は精度の違いが原因である可能性が高いため、値は等しくなる可能性があります。 次の例では、この手法を使用して.33333 と 1/3 を比較します。これは、前のコード例で等しくないことがわかった 2 つの Single 値です。

C#
// Initialize two floats with apparently identical values
float float1 = .33333f;
object float2 = (float) 1/3;
// Define the tolerance for variation in their values
float difference = Math.Abs(float1 * .0001f);

// Compare the values
// The output to the console indicates that the two values are equal
if (Math.Abs(float1 - (float) float2) <= difference)
   Console.WriteLine("float1 and float2 are equal.");
else
   Console.WriteLine("float1 and float2 are unequal.");

この場合、値は等しくなります。

注意

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

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

注意 (呼び出し元)

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

C#
using System;

public class Example
{
   static float 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);

      double dbl1 = 112;
      Console.WriteLine("value = dbl1: {0,20}", value.Equals(dbl1));
      TestObjectForEquality(dbl1);
   }

   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 (Single) = 112 (Byte): False
//
//       value = short1:             True
//       112 (Single) = 112 (Int16): False
//
//       value = int1:               True
//       112 (Single) = 112 (Int32): False
//
//       value = long1:              True
//       112 (Single) = 112 (Int64): False
//
//       value = sbyte1:             True
//       112 (Single) = 112 (SByte): False
//
//       value = ushort1:             True
//       112 (Single) = 112 (UInt16): False
//
//       value = uint1:               True
//       112 (Single) = 112 (UInt32): False
//
//       value = ulong1:              True
//       112 (Single) = 112 (UInt64): False
//
//       value = dec1:                 False
//       112 (Single) = 112 (Decimal): False
//
//       value = dbl1:                False
//       112 (Single) = 112 (Double): 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

Equals(Single)

ソース:
Single.cs
ソース:
Single.cs
ソース:
Single.cs

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

C#
public bool Equals(float obj);

パラメーター

obj
Single

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

戻り値

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

実装

注釈

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

注意 (呼び出し元)

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

C#
using System;

public class Example
{
   static float 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);

      double dbl1 = 112;
      Console.WriteLine("value = dbl1: {0,20}", value.Equals(dbl1));
      TestObjectForEquality(dbl1);
   }

   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 (Single) = 112 (Byte): False
//
//       value = short1:             True
//       112 (Single) = 112 (Int16): False
//
//       value = int1:               True
//       112 (Single) = 112 (Int32): False
//
//       value = long1:              True
//       112 (Single) = 112 (Int64): False
//
//       value = sbyte1:             True
//       112 (Single) = 112 (SByte): False
//
//       value = ushort1:             True
//       112 (Single) = 112 (UInt16): False
//
//       value = uint1:               True
//       112 (Single) = 112 (UInt32): False
//
//       value = ulong1:              True
//       112 (Single) = 112 (UInt64): False
//
//       value = dec1:                 False
//       112 (Single) = 112 (Decimal): False
//
//       value = dbl1:                False
//       112 (Single) = 112 (Double): 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