Double.Equals メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
Double の 2 つのインスタンスが同じ値を表しているかどうかを示す値を返します。
オーバーロード
Equals(Double) |
このインスタンスと指定した Double オブジェクトが同じ値を表しているかどうかを示す値を返します。 |
Equals(Object) |
このインスタンスが指定されたオブジェクトに等しいかどうかを示す値を返します。 |
Equals(Double)
- ソース:
- Double.cs
- ソース:
- Double.cs
- ソース:
- Double.cs
このインスタンスと指定した Double オブジェクトが同じ値を表しているかどうかを示す値を返します。
public:
virtual bool Equals(double obj);
public bool Equals (double obj);
override this.Equals : double -> bool
Public Function Equals (obj As Double) As Boolean
パラメーター
戻り値
obj
がこのインスタンスと等しい場合は true
。それ以外の場合は false
。
実装
注釈
この API の詳細については、「 Double.Equals の補足 API 解説」を参照してください。
注意 (呼び出し元)
コンパイラ のオーバーロード解決では、2 つの Equals(Object) メソッド オーバーロードの動作の明らかな違いが考慮される場合があります。 引数と Double の間のobj
暗黙的な変換が定義されていて、 引数が としてObject型指定されていない場合、コンパイラは暗黙的な変換を実行し、 メソッドをEquals(Double)呼び出す可能性があります。 それ以外の場合は、 メソッドをEquals(Object)呼び出します。これは、引数がobj
値でない場合は常に をDouble返false
します。 次の例は、2 つのメソッド オーバーロード間の動作の違いを示しています。 C# を除くDecimalすべてのプリミティブ数値型の場合、コンパイラtrue
が拡大変換を自動的に実行して メソッドを呼び出すのに対し、2 番目の比較では コンパイラが メソッドを呼び出Equals(Double)Equals(Object)すので、最初の比較は を返false
します。
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)
- ソース:
- Double.cs
- ソース:
- Double.cs
- ソース:
- 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 -> bool
Public Overrides Function Equals (obj As Object) As Boolean
パラメーター
- obj
- Object
このインスタンスと比較するオブジェクト。
戻り値
obj
が Double のインスタンスで、このインスタンスの値に等しい場合は true
。それ以外の場合は false
。
注釈
メソッドは Equals 、2 つの値の精度が異なるため、2 つの明らかに同等の値が等しくない可能性があるため、注意して使用する必要があります。 次の例では、 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の実装とバージョンに固有です。 したがって、数値の内部表現の精度が変わる可能性があるため、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
値でない場合は常に をDouble返false
します。 次の例は、2 つのメソッド オーバーロード間の動作の違いを示しています。 C# を除くDecimalすべてのプリミティブ数値型の場合、コンパイラtrue
が拡大変換を自動的に実行して メソッドを呼び出すのに対し、2 番目の比較では コンパイラが メソッドを呼び出Equals(Double)Equals(Object)すので、最初の比較は を返false
します。
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
こちらもご覧ください
適用対象
.NET