Tipos numéricos de punto flotante (referencia de C#)Floating-point numeric types (C# reference)

Los tipos numéricos de punto flotante representan números reales.The floating-point numeric types represent real numbers. Todos los tipos numéricos de punto flotante son tipos de valor.All floating-point numeric types are value types. También son tipos simples y se pueden inicializar con literales.They are also simple types and can be initialized with literals. Todos los tipos de punto flotante numéricos admiten operadores aritméticos, de comparación y de igualdad.All floating-point numeric types support arithmetic, comparison, and equality operators.

Características de los tipos de punto flotanteCharacteristics of the floating-point types

C# admite los siguientes tipos de punto flotante predefinidos:C# supports the following predefined floating-point types:

Palabra clave/tipo de C#C# type/keyword Intervalo aproximadoApproximate range PrecisiónPrecision TamañoSize Tipo de .NET.NET type
float De ±1,5 x 10-45 a ±3,4 x 1038±1.5 x 10−45 to ±3.4 x 1038 De 6 a 9 dígitos aproximadamente~6-9 digits 4 bytes4 bytes System.Single
double De ±5,0 × 10−324 a ±1,7 × 10308±5.0 × 10−324 to ±1.7 × 10308 De 15 a 17 dígitos aproximadamente~15-17 digits 8 bytes8 bytes System.Double
decimal De ±1,0 x 10-28 to ±7,9228 x 1028±1.0 x 10-28 to ±7.9228 x 1028 28-29 dígitos28-29 digits 16 bytes16 bytes System.Decimal

En la tabla anterior, cada palabra clave de tipo de C# de la columna ubicada más a la izquierda es un alias del tipo de .NET correspondiente.In the preceding table, each C# type keyword from the leftmost column is an alias for the corresponding .NET type. Son intercambiables.They are interchangeable. Por ejemplo, en las declaraciones siguientes se declaran variables del mismo tipo:For example, the following declarations declare variables of the same type:

double a = 12.3;
System.Double b = 12.3;

El valor predeterminado de cada tipo de punto flotante es cero, 0.The default value of each floating-point type is zero, 0. Cada uno de los tipos de punto flotante tiene las constantes MinValue y MaxValue que proporcionan el valor finito mínimo y máximo de ese tipo.Each of the floating-point types has the MinValue and MaxValue constants that provide the minimum and maximum finite value of that type. Los tipos float y double también brindan constantes que representan valores infinitos y no numéricos.The float and double types also provide constants that represent not-a-number and infinity values. Por ejemplo, el tipo double ofrece las siguientes constantes: Double.NaN, Double.NegativeInfinity y Double.PositiveInfinity.For example, the double type provides the following constants: Double.NaN, Double.NegativeInfinity, and Double.PositiveInfinity.

Como el tipo decimal tiene más precisión y un intervalo más reducido que float y double, es adecuado para los cálculos financieros y monetarios.Because the decimal type has more precision and a smaller range than both float and double, it's appropriate for financial and monetary calculations.

En una expresión, puede combinar tipos enteros y tipos float y double.You can mix integral types and the float and double types in an expression. En este caso, los tipos enteros se convierten implícitamente en uno de los tipos de punto flotante y, si es necesario, el tipo float se convierte implícitamente en double.In this case, integral types are implicitly converted to one of the floating-point types and, if necessary, the float type is implicitly converted to double. La expresión se evalúa de la siguiente forma:The expression is evaluated as follows:

  • Si hay un tipo double en la expresión, esta se evalúa como double, o bien como bool en comparaciones relacionales o de igualdad.If there is double type in the expression, the expression evaluates to double, or to bool in relational and equality comparisons.
  • Si no hay un tipo double en la expresión, esta se evalúa como float, o bien como bool en comparaciones relacionales o de igualdad.If there is no double type in the expression, the expression evaluates to float, or to bool in relational and equality comparisons.

También es posible combinar en una expresión tipos enteros y el tipo decimal.You can also mix integral types and the decimal type in an expression. En este caso, los tipos enteros se convierten implícitamente en el tipo decimal y la expresión se evalúa como decimal, o bien como bool en comparaciones relacionales y de igualdad.In this case, integral types are implicitly converted to the decimal type and the expression evaluates to decimal, or to bool in relational and equality comparisons.

En una expresión, no se puede mezclar el tipo decimal con los tipos float y double.You cannot mix the decimal type with the float and double types in an expression. En este caso, si quiere realizar operaciones aritméticas, de comparación o de igualdad, debe convertir explícitamente los operandos del tipo decimal o a este mismo tipo, como se muestra en el ejemplo siguiente:In this case, if you want to perform arithmetic, comparison, or equality operations, you must explicitly convert the operands either from or to the decimal type, as the following example shows:

double a = 1.0;
decimal b = 2.1m;
Console.WriteLine(a + (double)b);
Console.WriteLine((decimal)a + b);

Puede usar cadenas con formato numérico estándar o cadenas con formato numérico personalizado para dar formato a un valor de punto flotante.You can use either standard numeric format strings or custom numeric format strings to format a floating-point value.

Literales realesReal literals

El tipo de un literal real viene determinado por su sufijo, como se indica a continuación:The type of a real literal is determined by its suffix as follows:

  • El literal sin sufijo o con el sufijo d o D es del tipo doubleThe literal without suffix or with the d or D suffix is of type double
  • El literal con el sufijo f o F es del tipo floatThe literal with the f or F suffix is of type float
  • El literal con el sufijo m o M es del tipo decimalThe literal with the m or M suffix is of type decimal

En el código siguiente se muestra un ejemplo de cada uno de ellos:The following code demonstrates an example of each:

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 un separador de dígitos, que se admite a partir de C# 7.0.The preceding example also shows the use of _ as a digit separator, which is supported starting with C# 7.0. Puede usar el separador de dígitos con todos los tipos de literales numéricos.You can use the digit separator with all kinds of numeric literals.

También puede usar la notación científica; es decir, especificar una parte exponencial de un literal real, como se muestra en el ejemplo siguiente:You can also use scientific notation, that is, specify an exponent part of a real literal, as the following example shows:

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

ConversionesConversions

Solo hay una conversión implícita entre los tipos numéricos de punto flotante: de float a double.There is only one implicit conversion between floating-point numeric types: from float to double. Sin embargo, puede convertir un tipo de punto flotante a cualquier otro tipo de punto flotante con la conversión explícita.However, you can convert any floating-point type to any other floating-point type with the explicit cast. Para obtener más información, consulte Conversiones numéricas integradas.For more information, see Built-in numeric conversions.

Especificación del lenguaje C#C# language specification

Para más información, vea las secciones siguientes de la Especificación del lenguaje C#:For more information, see the following sections of the C# language specification:

Vea tambiénSee also