Single.Equals Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Retorna um valor que indica se duas instâncias de Single representam o mesmo valor.
Sobrecargas
Equals(Object) |
Retorna um valor que indica se a instância é igual a um objeto especificado. |
Equals(Single) |
Retorna um valor que indica se essa instância e um objeto Single especificado representam o mesmo valor. |
Equals(Object)
- Origem:
- Single.cs
- Origem:
- Single.cs
- Origem:
- Single.cs
Retorna um valor que indica se a instância é igual a um objeto especificado.
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
Parâmetros
- obj
- Object
Um objeto a ser comparado com essa instância.
Retornos
true
se obj
é uma instância de Single e é igual ao valor dessa instância; caso contrário, false
.
Exemplos
O exemplo de código a seguir demonstra o Equals método .
obj1 = (Single)500;
if ( a.Equals( obj1 ) )
{
Console::WriteLine( "The value type and reference type values are equal." );
}
obj1 = (Single)500;
if (a.Equals(obj1)) {
Console.WriteLine("The value type and reference type values are equal.");
}
let obj1 = single 500
if a.Equals obj1 then
printfn "The value type and reference type values are equal."
Obj1 = CType(500, Single)
If A.Equals(Obj1) Then
Console.WriteLine("The value type and reference type values are equal.")
End If
Comentários
O Equals método deve ser usado com cuidado, pois dois valores aparentemente equivalentes podem ser diferentes devido à precisão diferente dos dois valores. O exemplo a seguir relata que o Single valor .3333 e o Single retornado dividindo 1 por 3 são diferentes.
// 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
// Initialize two floats with apparently identical values
let float1 = 0.33333f
let float2 = box (1f / 3f)
// Compare them for equality
printfn $"{float1.Equals float2}" // displays false
' Initialize two singles with apparently identical values
Dim single1 As Single = .33333
Dim single2 As Object = 1/3
' Compare them for equality
Console.WriteLine(single1.Equals(single2)) ' displays False
Em vez de comparar a igualdade, uma técnica recomendada envolve definir uma margem aceitável de diferença entre dois valores (como 0,01% de um dos valores). Se o valor absoluto da diferença entre os dois valores for menor ou igual a essa margem, é provável que a diferença seja devido a diferenças de precisão e, portanto, os valores provavelmente serão iguais. O exemplo a seguir usa essa técnica para comparar .33333 e 1/3, os dois Single valores que o exemplo de código anterior considerou diferentes.
// 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.");
// Initialize two floats with apparently identical values
let float1 = 0.33333f
let float2 = box (1f / 3f)
// Define the tolerance for variation in their values
let difference = abs (float1 * 0.0001f)
// Compare the values
// The output to the console indicates that the two values are equal
if abs (float1 - (float2 :?> float32)) <= difference then
printfn "float1 and float2 are equal."
else
printfn "float1 and float2 are unequal."
' Initialize two singles with apparently identical values
Dim single1 As Single = .33333
Dim single2 As Object = 1/3
' Define the tolerance for variation in their values
Dim difference As Single = Math.Abs(single1 * .0001f)
' Compare the values
' The output to the console indicates that the two values are equal
If Math.Abs(single1 - CSng(single2)) <= difference Then
Console.WriteLine("single1 and single2 are equal.")
Else
Console.WriteLine("single1 and single2 are unequal.")
End If
Nesse caso, os valores são iguais.
Observação
Como Epsilon define a expressão mínima de um valor positivo cujo intervalo é próximo de zero, a margem de diferença deve ser maior que Epsilon. Normalmente, ele é muitas vezes maior que Epsilon.
A precisão dos números de ponto flutuante além da precisão documentada é específica da implementação e da versão do .NET Framework. Consequentemente, uma comparação entre dois números específicos pode mudar entre versões do .NET Framework porque a precisão da representação interna dos números pode mudar.
Notas aos Chamadores
A resolução de sobrecarga do compilador pode levar em conta uma diferença aparente no comportamento das duas Equals(Object) sobrecargas de método. Se uma conversão implícita entre o obj
argumento e um Single for definida e o argumento não for digitado como um Object, os compiladores poderão executar uma conversão implícita e chamar o Equals(Single) método . Caso contrário, eles chamam o Equals(Object) método , que sempre retornará false
se seu obj
argumento não for um Single valor. O exemplo a seguir ilustra a diferença de comportamento entre as duas sobrecargas de método. No caso de todos os tipos numéricos primitivos, exceto Double no Visual Basic e com exceção Decimal de e Double em C#, a primeira comparação retorna true
porque o compilador executa automaticamente uma conversão de expansão e chama o Equals(Single) método , enquanto a segunda comparação retorna false
porque o compilador chama o Equals(Object) método .
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
let value = 112f
let testObjectForEquality (obj: obj) =
printfn $"{value} ({value.GetType().Name}) = {obj} ({obj.GetType().Name}): {value.Equals obj}\n"
[<EntryPoint>]
let main _ =
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 dbl1 = 112.
printfn $"value = dbl1: {value.Equals dbl1,20}"
testObjectForEquality dbl1
0
// 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
Module Example
Dim value As Single = 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 dbl1 As Double = 112
Console.WriteLine("value = dbl1: {0,20}", value.Equals(dbl1))
TestObjectForEquality(dbl1)
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 (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: True
' 112 (Single) = 112 (Decimal): False
'
' value = dbl1: False
' 112 (Single) = 112 (Double): False
Confira também
Aplica-se a
Equals(Single)
- Origem:
- Single.cs
- Origem:
- Single.cs
- Origem:
- Single.cs
Retorna um valor que indica se essa instância e um objeto Single especificado representam o mesmo valor.
public:
virtual bool Equals(float obj);
public bool Equals (float obj);
override this.Equals : single -> bool
Public Function Equals (obj As Single) As Boolean
Parâmetros
- obj
- Single
Um objeto a ser comparado com essa instância.
Retornos
true
se obj
for igual a essa instância; caso contrário, false
.
Implementações
Comentários
Para obter mais informações sobre essa API, consulte Comentários de API complementares para Single.Equals.
Notas aos Chamadores
A resolução de sobrecarga do compilador pode levar em conta uma diferença aparente no comportamento das duas Equals(Object) sobrecargas de método. Se uma conversão implícita entre o obj
argumento e um Single for definida e o argumento não for digitado como um Object, os compiladores poderão executar uma conversão implícita e chamar o Equals(Single) método . Caso contrário, eles chamam o Equals(Object) método , que sempre retornará false
se seu obj
argumento não for um Single valor. O exemplo a seguir ilustra a diferença de comportamento entre as duas sobrecargas de método. No caso de todos os tipos numéricos primitivos, exceto Double no Visual Basic e com exceção Decimal de e Double em C#, a primeira comparação retorna true
porque o compilador executa automaticamente uma conversão de expansão e chama o Equals(Single) método , enquanto a segunda comparação retorna false
porque o compilador chama o Equals(Object) método .
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
let value = 112f
let testObjectForEquality (obj: obj) =
printfn $"{value} ({value.GetType().Name}) = {obj} ({obj.GetType().Name}): {value.Equals obj}\n"
[<EntryPoint>]
let main _ =
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 dbl1 = 112.
printfn $"value = dbl1: {value.Equals dbl1,20}"
testObjectForEquality dbl1
0
// 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
Module Example
Dim value As Single = 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 dbl1 As Double = 112
Console.WriteLine("value = dbl1: {0,20}", value.Equals(dbl1))
TestObjectForEquality(dbl1)
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 (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: True
' 112 (Single) = 112 (Decimal): False
'
' value = dbl1: False
' 112 (Single) = 112 (Double): False