このトピックはまだ評価されていません - このトピックを評価する

Single.Equals メソッド (Object)

2013/12/12

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

Namespace:  System
アセンブリ:  mscorlib (mscorlib.dll 内)
public override bool Equals(
	Object obj
)

パラメーター

obj
型: System.Object
このインスタンスと比較するオブジェクト。

戻り値

型: System.Boolean
objSingle のインスタンスで、このインスタンスの値と等しい場合は true。それ以外の場合は false

一見したところ等しい 2 つの値が、有効桁数が異なるために等しくない場合があるので、Equals メソッドの使用には注意が必要です。Single の値 0.3333 と、1 を 3 で除算すると返される Single が等しくないと報告される例を次に示します。


// Initialize two floats with apparently identical values
float float1 = .33333f;
object float2 = 1 / 3;
// Compare them for equality
outputBlock.Text += float1.Equals(float2) + "\n";    // displays false


2 つの値が等しいかどうか比較するのではなく、2 つの値の差異の許容範囲 (一方の値の 0.01% など) を定義することをお勧めします。2 つの値の差異の絶対値が許容範囲以下である場合、差異が生じる原因は有効桁数の違いである可能性が高いため、この 2 つの値は等しいと考えられます。この手法を使用して、前のコード例で等しくないと認識された 2 つの Single 値、0.33333 と 1/3 を比較する例を次に示します。


// 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 indicates that the two values are equal
if (Math.Abs(float1 - (float)float2) <= difference)
   outputBlock.Text += "float1 and float2 are equal." + "\n";
else
   outputBlock.Text += "float1 and float2 are unequal." + "\n";


この場合、値は等価です。

メモメモ:

Epsilon によって、範囲が 0 に近い正の最小値を表す式が定義されるため、差異の許容範囲は Epsilon より大きい必要があります。一般に、差異の許容範囲は Epsilon の何倍にもなります。

記載された有効桁数を越える浮動小数点数の有効桁数は、.NET Framework の実装およびバージョンによって異なります。その結果、.NET Framework のバージョンによって数値の内部表現の有効桁数が異なるために、2 つの数値を比較した結果がバージョンによって変わる場合があります。

Equals メソッドのコード例を次に示します。


obj1 = (Single)500;
if (a.Equals(obj1))
{
   outputBlock.Text += "The value type and reference type values are equal." + "\n";
}


Windows Phone OS

サポート: 8.0, 7.1, 7.0

この情報は役に立ちましたか。
(残り 1500 文字)
フィードバックをいただき、ありがとうございました
表示:
© 2014 Microsoft. All rights reserved.