2011-03-27 8 views
9

Estoy usando la primera manera y mi nueva compañía está utilizando la segunda.¿Cuál es la forma correcta de representar el doble en C#?

double x = 1.99; 

double y = 9.02D; 

cuál es correcto y por qué? y si ambos son correctos, ¿cómo se usa esto en diferentes escenarios?

+0

es sólo redundante de especificar el d ya que no es el "". Tengo otra compañía inventando "reglas" pero, los verdaderos gobernantes siempre son el lenguaje. –

+0

Gracias chicos por todos los resultados positivos. –

+0

Votaron a todos. Que tengas un gran día para todos. Gracias una vez más :) –

Respuesta

9

De msdn:

Por defecto, un verdadero literal numérico en el lado derecho de la asignación operador se trata como doble. Sin embargo, si desea un número entero a tratar como doble, utilice el sufijo d o D, por ejemplo: Copiar

doble x = 3D;

lo que no hay diferencia entre double x = 1.99; y double y = 9.02D;

3

El double y = 9.02D;, el sufijo D convierte el valor numérico (real) a un doble. Esto se usa si desea que su valor entero se convierta en un doble o para especificar que su valor es de hecho un doble.

E.g.

double d = 3D; 

Reference.

PS. Como mencionó Sehe, esto convertiría su variable d en una doble.

var d = 3D; 

sin el sufijo D, d habría sido una int.

+1

O tal vez de manera más convincente 'var d = 3D' – sehe

+0

Gracias Elite :) –

6

Diría que la forma en que su empresa lo está haciendo es probablemente más segura. La D después del valor 9.02 fuerza entero valor numérico (real) 9.02 para ser tratado como un doble.

+1

9.02 no tiene un valor entero. – Alan

+1

'9.02' no es un valor entero –

+0

rechazado, por la razón expresada anteriormente dos veces. Retirar ? –

2

punto de vista estilístico, por lo general, sólo tiene que añadir un 'd' o una 'D' cuando se desea un literal entero a ser un doble:

double d = 1d;

Así que en su ejemplo, haciendo double d = 1.99d, es inútil, porque el compilador ya asignará 1.99 a un doble. Sin mencionar que cuando declaró el d, su tipo también fue el doble.

En general, no necesita agregar d o D a los literales dobles.

Sin embargo, en su caso el segundo es correcto, porque es el estilo elegido por las personas que le pagan, y al final, eso es lo que realmente importa.

+0

Gracias Alan. :) +1 cuando puse el mismo pensamiento a mi colega. :) La gente genial piensa igual. –

2

El sufijo d es importante al usar la reflexión y otros usos dinámicos para imponer el compilador para considerar el número como el doble en lugar del número entero donde el doble puede tener un número sin decimal. 1.99 es el doble perfecto.

Durante el uso de la reflexión utilizando 1 dará error de conversión.

PropertyInfo p... 

p.SetValue(obj, 1) 

arrojará error, pero

p.SetValue(obj, 1D) 

funcionará correctamente.

var x = 1; 

x es int

var x = 1D; 

x es doble.

+1

Al menos use algún formato –

+0

Lo siento, escribí esto en el iPhone, no se admite el formato en el iPhone. –

+0

Gracias Henk :)) –

4

Un literal de coma flotante sin un sufijo es una double, por lo que no hay realmente ninguna diferencia entre 1.99 y 1.99D (o 1.99d) - excepto que la última forma hace explícito que este es, en efecto, un double. Entonces, es una cuestión de estilo, de verdad. En general, debe apegarse al estilo de su compañía (a menos que tenga una razón realmente convincente de que el estilo es "incorrecto", en cuyo caso debe convencer a la empresa de cambiar el estilo, en lugar de simplemente violarlo usted mismo;)).

+0

Me gusta tu sentido del humor. :) –

+1

Gracias, pero aunque lo formulé humorísticamente, también hablé en serio; lo único que es peor que un estilo de codificación incorrecto es la falta de estilo de codificación o la combinación de diferentes estilos de codificación :-) –

+0

Sí, tiene razón. Mi compañía anterior sufre mucho debido a un estilo de codificación incorrecto o mejor no asegura que todos los programadores sigan el mismo estilo de código. De todos modos, buen mensaje para todos los programadores. gracias –

4

Para una simple declaración, parece extraño.

La 'd' sufijo podría ser útil en situación como esta:

int n = 10; 
double a = n/3; // 3 
double a = n/3d; // 3.333.. 

Pero es la falta de forma de todos modos, ya que la segunda división depende de la conversión implícita de (n) a un doble antes de hacer la división .

mismo razonamiento si estuviera pasando una constante de coma flotante a un método que le pasó a tener dos sobrecargas:

void foo(float bar); 
void foo(double bar); 

se podía distinguir la versión que desea llamar llamando:

X.foo(3.0D); 

De nuevo no la mejor forma

En cuanto a la declaración simple, no hay una ventaja de velocidad, ya que es probable que el compilador la optimice de todos modos.

(ejemplo tomado de here)

+0

Explicar con el uso de una función es más comprensible. Gracias. :) –

Cuestiones relacionadas