Tipos de datos flotantes en C#

Resumen: en este tutorial, aprenderás a usar los tipos de datos flotantes de C# para representar números de coma flotante.
Introducción a los tipos flotantes de C#
Para representar números reales, C# usa los siguientes tipos de números flotantes: float
, double
y decimal
. La siguiente tabla muestra las características de los tipos de punto flotante:
Tipo flotante | Rango aproximado | Precisión | Tamaño |
---|---|---|---|
float |
±1.5 x 10−45 to ±3.4 x 1038 | ~6-9 digits | 4 bytes |
double |
±5.0 × 10−324 to ±1.7 × 10308 | ~15-17 digits | 8 bytes |
decimal |
±1.0 x 10-28 to ±7.9228 x 1028 | 28-29 digits | 16 bytes |
Prueba de igualdad
Dado que las computadoras solo pueden almacenar los números de punto flotante aproximadamente, provocará un comportamiento inesperado si intentas comparar dos números flotantes.
Por ejemplo, la siguiente expresión debería devolver true
:
0.3 == 0.1 + 0.1 + 01;
Pero devuelve false en su lugar:
bool result = 0.3 == 0.1 + 0.1 + 01;
Console.WriteLine(result); // false
El motivo es que la expresión devuelve un valor que es aproximadamente igual a 0.3, no a 0.3. Ver lo siguiente:
Console.WriteLine(0.1 + 0.1 + 0.1);
Resultado:
0.30000000000000004
Literales flotantes
Cada tipo flotante tiene una forma literal específica. Y todos los literales flotantes pueden tener el separador de dígitos (_)
para hacerlos más legibles.
float
Los literales flotantes tienen el sufijo f
o F
. Por ejemplo:
float rate = 5.2F;
float amount = 10_000.5f;
doble
Los literales dobles no tienen sufijo. Por ejemplo:
double dimension = 3.14
double radius = 1_000.5
O con el sufijo d
o D
así:
double dimension = 3.14d
double radius = 1_000.5D
decimal
Los literales decimales tienen el sufijo m
o M
:
decimal amount = 9.99m
decimal tax = 0.08M
Conversiones
C# convierte implícitamente un valor de float en double. Sin embargo, puedes usar una conversión explícita para convertir un valor de un tipo de punto flotante a otro.
Resumen
- C# usa los tipos float, double y decimal para representar números reales.
- Evita usar el operador de igualdad == para comparar dos números reales.