2009-04-09 22 views

Respuesta

9

la "f" de arriba es un tipo de sufijo. Esto le dice al compilador el tipo exacto del literal provisto. Esto se usa para que el compilador pueda asignar la cantidad apropiada de almacenamiento (precisión) para el literal. De forma predeterminada, los literales de punto flotante se almacenan para un "doble". Si agrega "f" como sufijo, el literal solo obtendrá el almacenamiento de un flotador, lo que tendrá menos precisión.

double d = 50.1234; // given double storage 
double d = 50.1234f; // given float storage, which might lose precision compared to double 
12

Principalmente por lo que el compilador sabe exactamente lo que queremos decir - en particular, para la resolución de sobrecarga:

Foo(57f); 

debe esa llamada Foo(int)/Foo(float)/Foo(decimal)?

En realidad, no me gusta recordar cosas - una alternativa es:

float someFloat = (float)57; 

esto es no un reparto de tiempo de ejecución - que es idéntico (a nivel de la IL) a 57f. La única vez que es sutilmente diferente es con decimal s con precisión adicional:

decimal someDecimal = (decimal)57.0; // same as 57M, not 57.0M (scale is different) 
3

De forma predeterminada, un literal numérico real en el lado derecho del operador de asignación se trata como el doble. Por lo tanto, para inicializar una variable de tipo float utilizar el sufijo f o F, por ejemplo:

float x = 3.5F; 

Si no se utiliza el sufijo en la declaración anterior, obtendrá un error de compilación porque está intentando almacenar una doble valor en una variable flotante.

De MSDN: float

-1

Porque 57 es un número entero y 57.0 es un doble. Estás tratando de obtener un flotador, que es un número de precisión único. Eso plantea la pregunta, ¿por qué estás usando un solo flotador de precisión?

Consulte http://www.blackwasp.co.uk/CSharpNumericLiterals.aspx para obtener más información sobre los literales de C#.

1

revisar este artículo que explica mucho sobre numéricos literales en C#: http://www.blackwasp.co.uk/CSharpNumericLiterals.aspx

Aquí es un poco de extracto del artículo:

flotador precioUnitario = 123,45; // Esta no se compilará

El problema aquí es que no se siempre puede convertir implícitamente una doble (123.45) en un flotador.El compilador de C# entiende esto y se detiene el código de ser compilado

0

Quiero saber por qué debemos utilizar literales f, como en el caso anterior ?.

No debe. Bueno, usted no tiene para.

El caso anterior muestra una inicialización de flotador en 57f. Los enteros se convierten implícitamente en tiempo de compilación de flotantes para que pueda quitar fácilmente ese sufijo f si eso le molesta. Sin embargo, para coherencia en el código escrito, siempre trato de agregar el sufijo. Tenga en cuenta que esto solo se aplica a los números redondeados (enteros).

Consulte Msdn en Implicit y Explicit conversaciones numéricas.

0

¿por qué deberíamos usar literales?

int/int = intperoint/float = float:

int timespanInMS = 500; 

Console.WriteLine("Execution time: {0} sec.", timespanInMS/1000); 
Console.WriteLine("Execution time: {0} sec.", timespanInMS/1000F); 

// Result: 
// Execution time: 0 sec. 
// Execution time: 0.5 sec. 
Cuestiones relacionadas