Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Los tipos numéricos de punto flotante representan números reales. Todos los tipos numéricos de punto flotante son tipos de valor. También son tipos simples y se pueden inicializar con literales. Todos los tipos numéricos de punto flotante admiten operadores aritméticos, de comparación e igualdad .
Características de los tipos de punto flotante
C# admite los siguientes tipos de punto flotante predefinidos:
| Tipo o palabra clave de C# | Intervalo aproximado | Precisión | Tamaño | Tipo de .NET |
|---|---|---|---|---|
float |
±1,5 x 10-45 a ±3,4 x 1038 | ~6-9 dígitos | 4 bytes | System.Single |
double |
±5,0 × de 10-324 a ±1,7 × 10308 | ~15-17 dígitos | 8 bytes | System.Double |
decimal |
±1,0 x 10-28 a ±7.9228 x 1028 | 28-29 dígitos | 16 bytes | System.Decimal |
En la tabla anterior, cada palabra clave de tipo de C# de la columna situada más a la izquierda es un alias para el tipo de .NET correspondiente. Son intercambiables. Por ejemplo, las declaraciones siguientes declaran variables del mismo tipo:
double a = 12.3;
System.Double b = 12.3;
El valor predeterminado de cada tipo de punto flotante es cero, 0. Cada uno de los tipos de punto flotante tiene las MinValue constantes y MaxValue que proporcionan el valor finito mínimo y máximo de ese tipo. Los float tipos y double también proporcionan constantes que representan valores no numéricos e infinitos. Por ejemplo, el double tipo proporciona las siguientes constantes: Double.NaN, Double.NegativeInfinityy Double.PositiveInfinity.
El decimal tipo es adecuado cuando el grado de precisión requerido viene determinado por el número de dígitos a la derecha del separador decimal. Estos números se usan normalmente en aplicaciones financieras, para importes de moneda (por ejemplo, 1,00 USD), tasas de interés (por ejemplo, 2,625%), etc. Los números pares que son precisos para un solo dígito decimal se controlan con mayor precisión por el decimal tipo: 0,1, por ejemplo, se pueden representar exactamente mediante una decimal instancia, mientras que no hay ninguna double instancia o float que represente exactamente 0,1. Debido a esta diferencia en los tipos numéricos, los errores de redondeo inesperados pueden producirse en cálculos aritméticos cuando se usa double o float para los datos decimales. Puede usar double en lugar de decimal cuando optimizar el rendimiento es más importante que garantizar la precisión. Sin embargo, cualquier diferencia en el rendimiento pasaría desapercibida por todas las aplicaciones que consumen más cálculo. Otra posible razón para evitar decimal es minimizar los requisitos de almacenamiento. Por ejemplo, ML.NET usa float porque la diferencia entre 4 bytes y 16 bytes se suma para conjuntos de datos muy grandes. Para obtener más información, consulte System.Decimal.
Puede mezclar tipos enteros y los float tipos y double en una expresión. En este caso, los tipos enteros se convierten implícitamente en uno de los tipos de punto flotante y, si es necesario, el float tipo se convierte implícitamente en double. La expresión se evalúa de la siguiente manera:
- Si hay
doubletipo en la expresión, la expresión se evalúa comodoubleo enboolcomparaciones relacionales e de igualdad. - Si no hay ningún
doubletipo en la expresión, la expresión se evalúa comofloato enboolcomparaciones relacionales y de igualdad.
También puede mezclar tipos enteros y el decimal tipo en una expresión. En este caso, los tipos enteros se convierten implícitamente en el decimal tipo y la expresión se evalúa como decimal, o en bool comparaciones relacionales e de igualdad.
No se puede mezclar el decimal tipo con los float tipos y double en una expresión. En este caso, si desea realizar operaciones aritméticas, de comparación o de igualdad, debe convertir explícitamente los operandos de o al decimal tipo, como se muestra en el ejemplo siguiente:
double a = 1.0;
decimal b = 2.1m;
Console.WriteLine(a + (double)b);
Console.WriteLine((decimal)a + b);
Puede usar cadenas de formato numérico estándar o cadenas de formato numérico personalizado para dar formato a un valor de punto flotante.
Literales reales
El tipo de un literal real viene determinado por su sufijo de la siguiente manera:
- El literal sin sufijo o con el
dsufijo oDes de tipodouble - El literal con el
fsufijo oFes de tipofloat - El literal con el
msufijo oMes de tipodecimal
En el código siguiente se muestra un ejemplo de cada uno:
double d = 3D;
d = 4d;
d = 3.934_001;
float f = 3_000.5F;
f = 5.4f;
decimal myMoney = 3_000.5m;
myMoney = 400.75M;
En el ejemplo anterior también se muestra el uso de _ como separador de dígitos. Puede usar el separador de dígitos con todo tipo de literales numéricos.
También puede usar notación científica, es decir, especificar una parte exponente de un literal real, como se muestra en el ejemplo siguiente:
double d = 0.42e2;
Console.WriteLine(d); // output 42
float f = 134.45E-2f;
Console.WriteLine(f); // output: 1.3445
decimal m = 1.5E6m;
Console.WriteLine(m); // output: 1500000
Conversiones
Solo hay una conversión implícita entre tipos numéricos de punto flotante: de float a double. Sin embargo, puede convertir cualquier tipo de punto flotante a cualquier otro tipo de punto flotante con la conversión explícita. Para obtener más información, consulte Conversiones numéricas integradas.
Especificación del lenguaje C#
Para más información, vea las secciones siguientes de la Especificación del lenguaje C#: