Single.CompareTo Método
Definición
Compara esta instancia con un objeto especificado o con otra instancia de Single y devuelve un entero que indica si el valor de esta instancia es menor, igual o mayor que el valor del objeto especificado o la otra instancia de Single.Compares this instance to a specified object or to another Single instance and returns an integer that indicates whether the value of this instance is less than, equal to, or greater than the value of the specified object or the other Single instance.
Sobrecargas
CompareTo(Object) |
Compara esta instancia con un objeto especificado y devuelve un entero que indica si el valor de esta instancia es mayor, igual o menor que el valor del objeto especificado.Compares this instance to a specified object and returns an integer that indicates whether the value of this instance is less than, equal to, or greater than the value of the specified object. |
CompareTo(Single) |
Compara esta instancia con un número de punto flotante de precisión sencilla especificado y devuelve un entero que indica si el valor de esta instancia es menor, igual o mayor que el valor del número de punto flotante de precisión sencilla especificado.Compares this instance to a specified single-precision floating-point number and returns an integer that indicates whether the value of this instance is less than, equal to, or greater than the value of the specified single-precision floating-point number. |
CompareTo(Object)
Compara esta instancia con un objeto especificado y devuelve un entero que indica si el valor de esta instancia es mayor, igual o menor que el valor del objeto especificado.Compares this instance to a specified object and returns an integer that indicates whether the value of this instance is less than, equal to, or greater than the value of the specified object.
public:
virtual int CompareTo(System::Object ^ value);
public int CompareTo (object value);
abstract member CompareTo : obj -> int
override this.CompareTo : obj -> int
Public Function CompareTo (value As Object) As Integer
Parámetros
- value
- Object
Objeto que se va a comparar o null
.An object to compare, or null
.
Devoluciones
Número con signo que indica los valores relativos de esta instancia y value
.A signed number indicating the relative values of this instance and value
.
Valor devueltoReturn Value | DescripciónDescription |
---|---|
Menor que ceroLess than zero | Esta instancia es menor que value .This instance is less than value .
O bien-or-
Esta instancia no es numérica (NaN) y value es un número.This instance is not a number (NaN) and value is a number.
|
CeroZero | Esta instancia es igual a value .This instance is equal to value .
O bien-or-
Tanto esta instancia como este valor no son numéricos (NaN) PositiveInfinity o NegativeInfinity.This instance and value are both not a number (NaN), PositiveInfinity, or NegativeInfinity.
|
Mayor que ceroGreater than zero | Esta instancia es mayor que value .This instance is greater than value .
o bien-or-
Esta instancia es numérica y este value no es numérico (NaN).This instance is a number and value is not a number (NaN).
o bien-or-
value es null .value is null .
|
Implementaciones
Excepciones
Ejemplos
En el ejemplo de código siguiente se muestra el método CompareTo.The following code example demonstrates the CompareTo method.
obj1 = (Single)450;
if ( a.CompareTo( obj1 ) < 0 )
{
Console::WriteLine( " {0} is less than {1}.", a, obj1 );
}
if ( a.CompareTo( obj1 ) > 0 )
{
Console::WriteLine( " {0} is greater than {1}.", a, obj1 );
}
if ( a.CompareTo( obj1 ) == 0 )
{
Console::WriteLine( " {0} equals {1}.", a, obj1 );
}
obj1 = (Single)450;
if (a.CompareTo(obj1) < 0)
{
Console.WriteLine("{0} is less than {1}.", a.ToString(), obj1.ToString());
}
if (a.CompareTo(obj1) > 0)
{
Console.WriteLine("{0} is greater than {1}.", a.ToString(), obj1.ToString());
}
if (a.CompareTo(obj1) == 0)
{
Console.WriteLine("{0} equals {1}.", a.ToString(), obj1.ToString());
}
Obj1 = CType(450, Single)
If A.CompareTo(Obj1) < 0 Then
Console.WriteLine(A.ToString() + " is less than " + Obj1.ToString() + ".")
End If
If (A.CompareTo(Obj1) > 0) Then
Console.WriteLine(A.ToString() + " is greater than " + Obj1.ToString() + ".")
End If
If (A.CompareTo(Obj1) = 0) Then
Console.WriteLine(A.ToString() + " equals " + Obj1.ToString() + ".")
End If
Comentarios
El parámetro value
debe ser null
o una instancia de Single; de lo contrario, se produce una excepción.The value
parameter must be null
or an instance of Single; otherwise, an exception is thrown. Cualquier instancia de Single, independientemente de su valor, se considera mayor que null
.Any instance of Single, regardless of its value, is considered greater than null
.
Los valores deben ser idénticos para que se consideren iguales.Values must be identical to be considered equal. Especialmente cuando los valores de punto flotante dependen de varias operaciones matemáticas, es habitual que pierdan precisión y que sus valores sean casi idénticos, salvo por sus dígitos menos significativos.Particularly when floating-point values depend on multiple mathematical operations, it is common for them to lose precision and for their values to be nearly identical except for their least significant digits. Por este motivo, el valor devuelto del método CompareTo puede parecer sorprendente a veces.Because of this, the return value of the CompareTo method may seem surprising at times. Por ejemplo, la multiplicación por un valor determinado seguido de la división por el mismo valor debe generar el valor original, pero en el ejemplo siguiente, el valor calculado se convierte en mayor que el valor original.For example, multiplication by a particular value followed by division by the same value should produce the original value, but in the following example, the computed value turns out to be greater than the original value. Al mostrar todos los dígitos significativos de los dos valores mediante la cadena de formato numérico estándar "R", se indica que el valor calculado difiere del valor original en los dígitos menos significativos.Showing all significant digits of the two values by using the "R" standard numeric format string indicates that the computed value differs from the original value in its least significant digits. Para obtener información sobre cómo controlar estas comparaciones, vea la sección Comentarios del método Equals(Single).For information about handling such comparisons, see the Remarks section of the Equals(Single) method.
using System;
public class Example
{
public static void Main()
{
float value1 = 16.5457f;
float operand = 3.8899982f;
object value2 = value1 * operand / operand;
Console.WriteLine("Comparing {0} and {1}: {2}\n",
value1, value2, value1.CompareTo(value2));
Console.WriteLine("Comparing {0:R} and {1:R}: {2}",
value1, value2, value1.CompareTo(value2));
}
}
// The example displays the following output:
// Comparing 16.5457 and 16.5457: -1
//
// Comparing 16.5457 and 16.545702: -1
Module Example
Public Sub Main()
Dim value1 As Single = 16.5457
Dim value2 As Object = value1 * CSng(3.8899982) / CSng(3.8899982)
Console.WriteLine("Comparing {0} and {1}: {2}",
value1, value2, value1.CompareTo(value2))
Console.WriteLine()
Console.WriteLine("Comparing {0:R} and {1:R}: {2}",
value1, value2, value1.CompareTo(value2))
End Sub
End Module
' The example displays the following output:
' Comparing 16.5457 and 16.5457: -1
'
' Comparing 16.5457 and 16.545702: -1
Este método se implementa para admitir la interfaz IComparable.This method is implemented to support the IComparable interface. Tenga en cuenta que, aunque no se considera que un NaN sea igual a otro NaN (incluso a sí mismo), la interfaz de IComparable requiere que A.CompareTo(A)
devuelva cero.Note that, although a NaN is not considered to be equal to another NaN (even itself), the IComparable interface requires that A.CompareTo(A)
return zero.
Precisión en comparacionesPrecision in Comparisons
La precisión de los números de punto flotante más allá de la precisión documentada es específica de la implementación y la versión de la .NET Framework.The precision of floating-point numbers beyond the documented precision is specific to the implementation and version of the .NET Framework. Por consiguiente, una comparación de dos números concretos podría cambiar entre las versiones del .NET Framework porque la precisión de la representación interna de los números podría cambiar.Consequently, a comparison of two particular numbers might change between versions of the .NET Framework because the precision of the numbers' internal representation might change.
Consulte también:
CompareTo(Single)
Compara esta instancia con un número de punto flotante de precisión sencilla especificado y devuelve un entero que indica si el valor de esta instancia es menor, igual o mayor que el valor del número de punto flotante de precisión sencilla especificado.Compares this instance to a specified single-precision floating-point number and returns an integer that indicates whether the value of this instance is less than, equal to, or greater than the value of the specified single-precision floating-point number.
public:
virtual int CompareTo(float value);
public int CompareTo (float value);
abstract member CompareTo : single -> int
override this.CompareTo : single -> int
Public Function CompareTo (value As Single) As Integer
Parámetros
- value
- Single
Número de punto flotante de precisión sencilla que se va a comparar.A single-precision floating-point number to compare.
Devoluciones
Número con signo que indica los valores relativos de esta instancia y value
.A signed number indicating the relative values of this instance and value
.
Valor devueltoReturn Value | DescripciónDescription |
---|---|
Menor que ceroLess than zero | Esta instancia es menor que value .This instance is less than value .
o bien-or-
Esta instancia no es numérica (NaN) y value es un número.This instance is not a number (NaN) and value is a number.
|
CeroZero | Esta instancia es igual a value .This instance is equal to value .
O bien-or-
Tanto esta instancia como este value no son numéricos (NaN), PositiveInfinity, o NegativeInfinity.Both this instance and value are not a number (NaN), PositiveInfinity, or NegativeInfinity.
|
Mayor que ceroGreater than zero | Esta instancia es mayor que value .This instance is greater than value .
O bien-or-
Esta instancia es numérica y este value no es numérico (NaN).This instance is a number and value is not a number (NaN).
|
Implementaciones
Ejemplos
En el ejemplo de código siguiente se muestran las versiones genéricas y no genéricas del método CompareTo para varios tipos de valor y de referencia.The following code example demonstrates generic and nongeneric versions of the CompareTo method for several value and reference types.
// This example demonstrates the two versions of the
// CompareTo method for several base types.
// The general version takes a parameter of type Object, while the specific
// version takes a type-specific parameter, such as Boolean, Int32, or Double.
using namespace System;
void Show( String^ caption, Object^ var1, Object^ var2, int resultGeneric, int resultNonGeneric )
{
String^ relation;
Console::Write( caption );
if ( resultGeneric == resultNonGeneric )
{
if ( resultGeneric < 0 )
relation = "less than";
else
if ( resultGeneric > 0 )
relation = "greater than";
else
relation = "equal to";
Console::WriteLine( "{0} is {1} {2}", var1, relation, var2 );
}
// The following condition will never occur because the generic and non-generic
// CompareTo methods are equivalent.
else
{
Console::WriteLine( "Generic CompareTo = {0}; non-generic CompareTo = {1}", resultGeneric, resultNonGeneric );
}
}
int main()
{
String^ nl = Environment::NewLine;
String^ msg = "{0}The following is the result of using the generic and non-generic{0}"
"versions of the CompareTo method for several base types:{0}";
Object^ obj; // An Object used to insure CompareTo(Object) is called.
DateTime now = DateTime::Now;
// Time span = 11 days, 22 hours, 33 minutes, 44 seconds
TimeSpan tsX = TimeSpan(11,22,33,44);
// Version = 1.2.333.4
Version^ versX = gcnew Version( "1.2.333.4" );
// Guid = CA761232-ED42-11CE-BACD-00AA0057B223
Guid guidX = Guid( "{CA761232-ED42-11CE-BACD-00AA0057B223}");
Boolean a1 = true,a2 = true;
Byte b1 = 1,b2 = 1;
Int16 c1 = -2,c2 = 2;
Int32 d1 = 3,d2 = 3;
Int64 e1 = 4,e2 = -4;
Decimal f1 = Decimal(-5.5), f2 = Decimal(5.5);
Single g1 = 6.6f,g2 = 6.6f;
Double h1 = 7.7,h2 = -7.7;
Char i1 = 'A',i2 = 'A';
String^ j1 = "abc", ^j2 = "abc";
DateTime k1 = now,k2 = now;
TimeSpan l1 = tsX,l2 = tsX;
Version^ m1 = versX, ^m2 = gcnew Version( "2.0" );
Guid n1 = guidX,n2 = guidX;
// The following types are not CLS-compliant.
SByte w1 = 8,w2 = 8;
UInt16 x1 = 9,x2 = 9;
UInt32 y1 = 10,y2 = 10;
UInt64 z1 = 11,z2 = 11;
//
Console::WriteLine( msg, nl );
try
{
Show( "Boolean: ", a1, a2, a1.CompareTo( a2 ), a1.CompareTo( a2 ) );
Show( "Byte: ", b1, b2, b1.CompareTo( b2 ), b1.CompareTo( b2 ) );
Show( "Int16: ", c1, c2, c1.CompareTo( c2 ), c1.CompareTo( c2 ) );
Show( "Int32: ", d1, d2, d1.CompareTo( d2 ), d1.CompareTo( d2 ) );
Show( "Int64: ", e1, e2, e1.CompareTo( e2 ), e1.CompareTo( e2 ) );
Show( "Decimal: ", f1, f2, f1.CompareTo( f2 ), f1.CompareTo( f2 ) );
Show( "Single: ", g1, g2, g1.CompareTo( g2 ), g1.CompareTo( g2 ) );
Show( "Double: ", h1, h2, h1.CompareTo( h2 ), h1.CompareTo( h2 ) );
Show( "Char: ", i1, i2, i1.CompareTo( i2 ), i1.CompareTo( i2 ) );
// Use an anonymous object to hide the String object.
obj = j2;
Show( "String: ", j1, j2, j1->CompareTo( j2 ), j1->CompareTo( obj ) );
Show( "DateTime:", k1, k2, k1.CompareTo( k2 ), k1.CompareTo( k2 ) );
Show( "TimeSpan: ", l1, l2, l1.CompareTo( l2 ), l1.CompareTo( l2 ) );
// Use an anonymous object to hide the Version object.
obj = m2;
Show( "Version: ", m1, m2, m1->CompareTo( m2 ), m1->CompareTo( obj ) );
Show( "Guid: ", n1, n2, n1.CompareTo( n2 ), n1.CompareTo( n2 ) );
//
Console::WriteLine( "{0}The following types are not CLS-compliant:", nl );
Show( "SByte: ", w1, w2, w1.CompareTo( w2 ), w1.CompareTo( w2 ) );
Show( "UInt16: ", x1, x2, x1.CompareTo( x2 ), x1.CompareTo( x2 ) );
Show( "UInt32: ", y1, y2, y1.CompareTo( y2 ), y1.CompareTo( y2 ) );
Show( "UInt64: ", z1, z2, z1.CompareTo( z2 ), z1.CompareTo( z2 ) );
}
catch ( Exception^ e )
{
Console::WriteLine( e );
}
}
// This example displays the following output:
//
// The following is the result of using the generic and non-generic versions of the
// CompareTo method for several base types:
//
// Boolean: True is equal to True
// Byte: 1 is equal to 1
// Int16: -2 is less than 2
// Int32: 3 is equal to 3
// Int64: 4 is greater than -4
// Decimal: -5.5 is less than 5.5
// Single: 6.6 is equal to 6.6
// Double: 7.7 is greater than -7.7
// Char: A is equal to A
// String: abc is equal to abc
// DateTime: 12/1/2003 5:37:46 PM is equal to 12/1/2003 5:37:46 PM
// TimeSpan: 11.22:33:44 is equal to 11.22:33:44
// Version: 1.2.333.4 is less than 2.0
// Guid: ca761232-ed42-11ce-bacd-00aa0057b223 is equal to ca761232-ed42-11ce-bacd-00
// aa0057b223
//
// The following types are not CLS-compliant:
// SByte: 8 is equal to 8
// UInt16: 9 is equal to 9
// UInt32: 10 is equal to 10
// UInt64: 11 is equal to 11
// This example demonstrates the generic and non-generic versions of the
// CompareTo method for several base types.
// The non-generic version takes a parameter of type Object, while the generic
// version takes a type-specific parameter, such as Boolean, Int32, or Double.
using System;
class Sample
{
public static void Main()
{
string nl = Environment.NewLine;
string msg = "{0}The following is the result of using the generic and non-generic{0}" +
"versions of the CompareTo method for several base types:{0}";
DateTime now = DateTime.Now;
// Time span = 11 days, 22 hours, 33 minutes, 44 seconds
TimeSpan tsX = new TimeSpan(11, 22, 33, 44);
// Version = 1.2.333.4
Version versX = new Version("1.2.333.4");
// Guid = CA761232-ED42-11CE-BACD-00AA0057B223
Guid guidX = new Guid("{CA761232-ED42-11CE-BACD-00AA0057B223}");
Boolean a1 = true, a2 = true;
Byte b1 = 1, b2 = 1;
Int16 c1 = -2, c2 = 2;
Int32 d1 = 3, d2 = 3;
Int64 e1 = 4, e2 = -4;
Decimal f1 = -5.5m, f2 = 5.5m;
Single g1 = 6.6f, g2 = 6.6f;
Double h1 = 7.7d, h2 = -7.7d;
Char i1 = 'A', i2 = 'A';
String j1 = "abc", j2 = "abc";
DateTime k1 = now, k2 = now;
TimeSpan l1 = tsX, l2 = tsX;
Version m1 = versX, m2 = new Version("2.0");
Guid n1 = guidX, n2 = guidX;
// The following types are not CLS-compliant.
SByte w1 = 8, w2 = 8;
UInt16 x1 = 9, x2 = 9;
UInt32 y1 = 10, y2 = 10;
UInt64 z1 = 11, z2 = 11;
//
Console.WriteLine(msg, nl);
try
{
// The second and third Show method call parameters are automatically boxed because
// the second and third Show method declaration arguments expect type Object.
Show("Boolean: ", a1, a2, a1.CompareTo(a2), a1.CompareTo((Object)a2));
Show("Byte: ", b1, b2, b1.CompareTo(b2), b1.CompareTo((Object)b2));
Show("Int16: ", c1, c2, c1.CompareTo(c2), c1.CompareTo((Object)c2));
Show("Int32: ", d1, d2, d1.CompareTo(d2), d1.CompareTo((Object)d2));
Show("Int64: ", e1, e2, e1.CompareTo(e2), e1.CompareTo((Object)e2));
Show("Decimal: ", f1, f2, f1.CompareTo(f2), f1.CompareTo((Object)f2));
Show("Single: ", g1, g2, g1.CompareTo(g2), g1.CompareTo((Object)g2));
Show("Double: ", h1, h2, h1.CompareTo(h2), h1.CompareTo((Object)h2));
Show("Char: ", i1, i2, i1.CompareTo(i2), i1.CompareTo((Object)i2));
Show("String: ", j1, j2, j1.CompareTo(j2), j1.CompareTo((Object)j2));
Show("DateTime: ", k1, k2, k1.CompareTo(k2), k1.CompareTo((Object)k2));
Show("TimeSpan: ", l1, l2, l1.CompareTo(l2), l1.CompareTo((Object)l2));
Show("Version: ", m1, m2, m1.CompareTo(m2), m1.CompareTo((Object)m2));
Show("Guid: ", n1, n2, n1.CompareTo(n2), n1.CompareTo((Object)n2));
//
Console.WriteLine("{0}The following types are not CLS-compliant:", nl);
Show("SByte: ", w1, w2, w1.CompareTo(w2), w1.CompareTo((Object)w2));
Show("UInt16: ", x1, x2, x1.CompareTo(x2), x1.CompareTo((Object)x2));
Show("UInt32: ", y1, y2, y1.CompareTo(y2), y1.CompareTo((Object)y2));
Show("UInt64: ", z1, z2, z1.CompareTo(z2), z1.CompareTo((Object)z2));
}
catch (Exception e)
{
Console.WriteLine(e);
}
}
public static void Show(string caption, Object var1, Object var2,
int resultGeneric, int resultNonGeneric)
{
string relation;
Console.Write(caption);
if (resultGeneric == resultNonGeneric)
{
if (resultGeneric < 0) relation = "less than";
else if (resultGeneric > 0) relation = "greater than";
else relation = "equal to";
Console.WriteLine("{0} is {1} {2}", var1, relation, var2);
}
// The following condition will never occur because the generic and non-generic
// CompareTo methods are equivalent.
else
{
Console.WriteLine("Generic CompareTo = {0}; non-generic CompareTo = {1}",
resultGeneric, resultNonGeneric);
}
}
}
/*
This example produces the following results:
The following is the result of using the generic and non-generic versions of the
CompareTo method for several base types:
Boolean: True is equal to True
Byte: 1 is equal to 1
Int16: -2 is less than 2
Int32: 3 is equal to 3
Int64: 4 is greater than -4
Decimal: -5.5 is less than 5.5
Single: 6.6 is equal to 6.6
Double: 7.7 is greater than -7.7
Char: A is equal to A
String: abc is equal to abc
DateTime: 12/1/2003 5:37:46 PM is equal to 12/1/2003 5:37:46 PM
TimeSpan: 11.22:33:44 is equal to 11.22:33:44
Version: 1.2.333.4 is less than 2.0
Guid: ca761232-ed42-11ce-bacd-00aa0057b223 is equal to ca761232-ed42-11ce-bacd-00
aa0057b223
The following types are not CLS-compliant:
SByte: 8 is equal to 8
UInt16: 9 is equal to 9
UInt32: 10 is equal to 10
UInt64: 11 is equal to 11
*/
' This example demonstrates the generic and non-generic versions of the
' CompareTo method for several base types.
' The non-generic version takes a parameter of type Object, while the generic
' version takes a type-specific parameter, such as Boolean, Int32, or Double.
Class Sample
Public Shared Sub Main()
Dim nl As String = Environment.NewLine
Dim msg As String = _
"{0}The following is the result of using the generic and non-generic{0}" & _
"versions of the CompareTo method for several base types:{0}"
Dim now As DateTime = DateTime.Now
' Time span = 11 days, 22 hours, 33 minutes, 44 seconds
Dim tsX As New TimeSpan(11, 22, 33, 44)
' Version = 1.2.333.4
Dim versX As New Version("1.2.333.4")
' Guid = CA761232-ED42-11CE-BACD-00AA0057B223
Dim guidX As New Guid("{CA761232-ED42-11CE-BACD-00AA0057B223}")
Dim a1 As [Boolean] = True, a2 As [Boolean] = True
Dim b1 As [Byte] = 1, b2 As [Byte] = 1
Dim c1 As Int16 = -2, c2 As Int16 = 2
Dim d1 As Int32 = 3, d2 As Int32 = 3
Dim e1 As Int64 = 4, e2 As Int64 = -4
Dim f1 As [Decimal] = -5.5D, f2 As [Decimal] = 5.5D
Dim g1 As [Single] = 6.6F, g2 As [Single] = 6.6F
Dim h1 As [Double] = 7.7, h2 As [Double] = -7.7
Dim i1 As [Char] = "A"c, i2 As [Char] = "A"c
Dim j1 As String = "abc", j2 As String = "abc"
Dim k1 As DateTime = now, k2 As DateTime = now
Dim l1 As TimeSpan = tsX, l2 As TimeSpan = tsX
Dim m1 As Version = versX, m2 As New Version("2.0")
Dim n1 As Guid = guidX, n2 As Guid = guidX
' The following types are not CLS-compliant.
' SByte, UInt16, UInt32, UInt64
Console.WriteLine(msg, nl)
Try
' The second and third Show method call parameters are automatically boxed because
' the second and third Show method declaration arguments expect type Object.
Show("Boolean: ", a1, a2, a1.CompareTo(a2), a1.CompareTo(CObj(a2)))
Show("Byte: ", b1, b2, b1.CompareTo(b2), b1.CompareTo(CObj(b2)))
Show("Int16: ", c1, c2, c1.CompareTo(c2), c1.CompareTo(CObj(c2)))
Show("Int32: ", d1, d2, d1.CompareTo(d2), d1.CompareTo(CObj(d2)))
Show("Int64: ", e1, e2, e1.CompareTo(e2), e1.CompareTo(CObj(e2)))
Show("Decimal: ", f1, f2, f1.CompareTo(f2), f1.CompareTo(CObj(f2)))
Show("Single: ", g1, g2, g1.CompareTo(g2), g1.CompareTo(CObj(g2)))
Show("Double: ", h1, h2, h1.CompareTo(h2), h1.CompareTo(CObj(h2)))
Show("Char: ", i1, i2, i1.CompareTo(i2), i1.CompareTo(CObj(i2)))
Show("String: ", j1, j2, j1.CompareTo(j2), j1.CompareTo(CObj(j2)))
Show("DateTime: ", k1, k2, k1.CompareTo(k2), k1.CompareTo(CObj(k2)))
Show("TimeSpan: ", l1, l2, l1.CompareTo(l2), l1.CompareTo(CObj(l2)))
Show("Version: ", m1, m2, m1.CompareTo(m2), m1.CompareTo(CObj(m2)))
Show("Guid: ", n1, n2, n1.CompareTo(n2), n1.CompareTo(CObj(n2)))
'
Console.WriteLine("{0}The following types are not CLS-compliant:", nl)
Console.WriteLine("SByte, UInt16, UInt32, UInt64")
Catch e As Exception
Console.WriteLine(e)
End Try
End Sub
Public Shared Sub Show(caption As String, var1 As [Object], var2 As [Object], _
resultGeneric As Integer, resultNonGeneric As Integer)
Dim relation As String
Console.Write(caption)
If resultGeneric = resultNonGeneric Then
If resultGeneric < 0 Then
relation = "less than"
ElseIf resultGeneric > 0 Then
relation = "greater than"
Else
relation = "equal to"
End If
Console.WriteLine("{0} is {1} {2}", var1, relation, var2)
' The following condition will never occur because the generic and non-generic
' CompareTo methods are equivalent.
Else
Console.WriteLine("Generic CompareTo = {0}; non-generic CompareTo = {1}", _
resultGeneric, resultNonGeneric)
End If
End Sub
End Class
'
'This example produces the following results:
'
'The following is the result of using the generic and non-generic versions of the
'CompareTo method for several base types:
'
'Boolean: True is equal to True
'Byte: 1 is equal to 1
'Int16: -2 is less than 2
'Int32: 3 is equal to 3
'Int64: 4 is greater than -4
'Decimal: -5.5 is less than 5.5
'Single: 6.6 is equal to 6.6
'Double: 7.7 is greater than -7.7
'Char: A is equal to A
'String: abc is equal to abc
'DateTime: 12/1/2003 5:37:46 PM is equal to 12/1/2003 5:37:46 PM
'TimeSpan: 11.22:33:44 is equal to 11.22:33:44
'Version: 1.2.333.4 is less than 2.0
'Guid: ca761232-ed42-11ce-bacd-00aa0057b223 is equal to ca761232-ed42-11ce-bacd-00
'aa0057b223
'
'The following types are not CLS-compliant:
'SByte, UInt16, UInt32, UInt64
'
Comentarios
Los valores deben ser idénticos para que se consideren iguales.Values must be identical to be considered equal. Es común que los valores de punto flotante pierdan precisión y se conviertan en casi idénticos, excepto en los dígitos menos significativos, especialmente cuando los valores dependen de varias operaciones matemáticas.It is common for floating-point values to lose precision and to become nearly identical except for their least significant digits, especially when the values depend on multiple mathematical operations. Por este motivo, el valor devuelto del método CompareTo a veces puede parecer sorprendente.Because of this, the return value of the CompareTo method at times may seem surprising. Por ejemplo, la multiplicación por cualquier valor seguido por la división por el mismo valor debe generar el valor original.For example, multiplication by any value followed by division by the same value should produce the original value. Sin embargo, en el ejemplo siguiente, el valor calculado resulta que es mayor que el valor original.However, in the following example, the computed value turns out to be greater than the original value. Al mostrar todos los dígitos significativos de los dos valores mediante la cadena de formato numérico estándar "R", se indica que el valor calculado difiere del valor original en los dígitos menos significativos.Showing all significant digits of the two values by using the "R" standard numeric format string indicates that the computed value differs from the original value in its least significant digits. Para obtener información sobre cómo controlar estas comparaciones, vea la sección Comentarios del método Equals(Single).For information about handling such comparisons, see the Remarks section of the Equals(Single) method.
using System;
public class Example
{
public static void Main()
{
float value1 = 16.5457f;
float operand = 3.8899982f;
float value2 = value1 * operand / operand;
Console.WriteLine("Comparing {0} and {1}: {2}\n",
value1, value2, value1.CompareTo(value2));
Console.WriteLine("Comparing {0:R} and {1:R}: {2}",
value1, value2, value1.CompareTo(value2));
}
}
// The example displays the following output:
// Comparing 16.5457 and 16.5457: -1
//
// Comparing 16.5457 and 16.545702: -1
Module Example
Public Sub Main()
Dim value1 As Single = 16.5457
Dim value2 As Single = value1 * CSng(3.8899982) / CSng(3.8899982)
Console.WriteLine("Comparing {0} and {1}: {2}",
value1, value2, value1.CompareTo(value2))
Console.WriteLine()
Console.WriteLine("Comparing {0:R} and {1:R}: {2}",
value1, value2, value1.CompareTo(value2))
End Sub
End Module
' The example displays the following output:
' Comparing 16.5457 and 16.5457: -1
'
' Comparing 16.5457 and 16.545702: -1
Este método implementa la interfaz System.IComparable<T> y se ejecuta ligeramente mejor que el método Single.CompareTo porque no tiene que convertir el parámetro value
en un objeto.This method implements the System.IComparable<T> interface and performs slightly better than the Single.CompareTo method because it does not have to convert the value
parameter to an object.
Tenga en cuenta que, aunque un objeto cuyo valor es NaN no se considera igual a otro objeto cuyo valor es NaN (incluso en sí mismo), la interfaz IComparable<T> requiere que A.CompareTo(A)
devuelva cero.Note that, although an object whose value is NaN is not considered equal to another object whose value is NaN (even itself), the IComparable<T> interface requires that A.CompareTo(A)
return zero.
conversiones de ampliaciónWidening Conversions
Dependiendo del lenguaje de programación, es posible que se pueda codificar un método de CompareTo en el que el tipo de parámetro tenga menos bits (es más estrecho) que el tipo de instancia.Depending on your programming language, it might be possible to code a CompareTo method where the parameter type has fewer bits (is narrower) than the instance type. Esto es posible porque algunos lenguajes de programación realizan una conversión de ampliación implícita que representa el parámetro como un tipo con tantos bits como instancia.This is possible because some programming languages perform an implicit widening conversion that represents the parameter as a type with as many bits as the instance.
Por ejemplo, supongamos que el tipo de instancia es Single y el tipo de parámetro es Int32.For example, suppose the instance type is Single and the parameter type is Int32. El compilador de Microsoft C# genera instrucciones para representar el valor del parámetro como un objeto Single y, a continuación, genera un método Single.CompareTo(Single) que compara los valores de la instancia y la representación ampliada del parámetro.The Microsoft C# compiler generates instructions to represent the value of the parameter as a Single object, then generates a Single.CompareTo(Single) method that compares the values of the instance and the widened representation of the parameter.
Consulte la documentación del lenguaje de programación para determinar si su compilador realiza conversiones de ampliación implícitas de tipos numéricos.Consult your programming language's documentation to determine if its compiler performs implicit widening conversions of numeric types. Para obtener más información, vea el tema tablas de conversión de tipos .For more information, see the Type Conversion Tables topic.
Precisión en comparacionesPrecision in Comparisons
La precisión de los números de punto flotante más allá de la precisión documentada es específica de la implementación y la versión de la .NET Framework.The precision of floating-point numbers beyond the documented precision is specific to the implementation and version of the .NET Framework. Por consiguiente, una comparación de dos números concretos podría cambiar entre las versiones del .NET Framework porque la precisión de la representación interna de los números podría cambiar.Consequently, a comparison of two particular numbers might change between versions of the .NET Framework because the precision of the numbers' internal representation might change.