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

Los tipos de punto flotante son un subconjunto de tipos simples y se pueden inicializar con literales.The floating-point types are a subset of the simple types and can be initialized with literals. Todos los tipos de punto flotante también son tipos de valor.All floating-point types are also value types. Todos los tipos de punto flotante numéricos admiten operadores aritméticos de comparación e 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 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 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 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 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.

Puede combinar tipos enteros y tipos de punto flotante en una expresión.You can mix integral types and floating-point types in an expression. En este caso, los tipos enteros se convierten a tipos de punto flotante.In this case, the integral types are converted to floating-point types. La evaluación de la expresión se realiza según las reglas siguientes:The evaluation of the expression is performed according to the following rules:

  • Si uno de los tipos de punto flotante es double, la expresión se evalúa como double o bool en comparaciones relacionales o de igualdad.If one of the floating-point types is double, the expression evaluates to double, or to bool in relational comparisons or comparisons for equality.
  • Si no hay ningún tipo double en la expresión, esta se evalúa como float o 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 comparisons or comparisons for equality.

Una expresión de punto flotante puede contener los siguientes conjuntos de valores:A floating-point expression can contain the following sets of values:

  • Cero positivo y negativoPositive and negative zero
  • Infinito positivo y negativoPositive and negative infinity
  • Valor no numérico (NaN)Not-a-Number value (NaN)
  • El conjunto finito de valores distintos de ceroThe finite set of nonzero values

Para obtener más información sobre estos valores, vea el estándar IEEE para aritmética binaria de punto flotante, disponible en el sitio web de IEEE.For more information about these values, see IEEE Standard for Binary Floating-Point Arithmetic, available on the IEEE website.

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 de punto flotanteFloating-point literals

De forma predeterminada, un literal numérico de punto flotante a la derecha del operador de asignación se trata como double.By default, a floating-point numeric literal on the right side of the assignment operator is treated as double. Puede usar sufijos para convertir un literal de punto flotante o entero a un tipo específico:You can use suffixes to convert a floating-point or integral literal to a specific type:

  • El sufijo d o D convierte un literal en double.The d or D suffix converts a literal to a double.
  • El sufijo f o F convierte un literal en float.The f or F suffix converts a literal to a float.
  • El sufijo m o M convierte un literal en decimal.The m or M suffix converts a literal to a decimal.

En los siguientes ejemplos se muestra cada sufijo:The following examples show each suffix:

double d = 3D;
d = 4d;
float f = 3.5F;
f = 5.4f;
decimal myMoney = 300.5m;
myMoney = 400.75M;

ConversionesConversions

Hay una conversión implícita (llamada conversión de ampliación) desde float a double porque el intervalo de valores float es un subconjunto apropiado de double y no hay ninguna pérdida de precisión de float a double.There's an implicit conversion (called a widening conversion) from float to double because the range of float values is a proper subset of double and there is no loss of precision from float to double.

Debe usar una conversión explícita para convertir un tipo de punto flotante en otro tipo de punto flotante cuando no se define una conversión implícita del tipo de origen en el tipo de destino.You must use an explicit cast to convert one floating-point type to another floating-point type when an implicit conversion isn't defined from the source type to the destination type. Esto se denomina conversión de restricción.This is called a narrowing conversion. El caso explícito es necesario porque la conversión puede producir pérdida de datos.The explicit case is required because the conversion can result in data loss. No hay ninguna conversión implícita entre otros tipos de punto flotante y el tipo decimal puesto que el tipo decimal tiene mayor precisión que float o double.There's no implicit conversion between other floating-point types and the decimal type because the decimal type has greater precision than either float or double.

Para obtener más información sobre las conversiones numéricas implícitas, consulte Tabla de conversiones numéricas implícitas.For more information about implicit numeric conversions, see Implicit Numeric Conversions Table.

Para obtener más información sobre las conversiones numéricas explícitas, consulte Tabla de conversiones numéricas explícitas.For more information about explicit numeric conversions, see Explicit Numeric Conversions Table.

Vea tambiénSee also