2012-02-26 17 views
7

Duplicar posible:
C programming divisionLa división entera siempre cero

probablemente mi pregunta es muy simple y estúpida. Me gustaría almacenar el valor de una división, en particular 1/x donde x es un valor entero de .

int x = 17; 
double result = 1/x; 

trato de hacerlo, pero siempre me sale 0.000000 ... intento introducir un valor fijo en x, por ejemplo 1/17 pero siempre me dan el mismo valor .. ¿Qué pasa?

Respuesta

25

Usted está haciendo la división de enteros.

intente lo siguiente y funcionará como se esperaba:

int x = 17; 
double result = 1.0/x; 

El tipo de la 1 en la expresión que tiene encima es int, y el tipo de x es int. Cuando lo haces int/int, obtienes un int atrás. Necesita al menos uno de los tipos implicados para ser punto flotante (float o double) para que se produzca la división de coma flotante.

A diferencia de las matemáticas, la división en C++ puede referirse tanto a la división de enteros truncados (lo que usted hizo) como a la división de coma flotante (lo que hice en mi ejemplo). ¡Ten cuidado con esto!

En mi ejemplo, explícitamente lo que tenemos es double/int -> double.

+3

O para dejarlo en claro: 'doble resultado = (doble) 1/x;' – Nobody

+1

@ Nadie ¿Entonces quiere decir 'doble resultado = 1.0/x;'? Bueno, el compilador hará esto por ti, pero se reirá de ti por no reconocer una doble literal. –

+1

@Christian Rau Fue más un ejemplo didáctico para hacer que el tipo automático sea más visible. Por supuesto, como programador siempre escribiría '1.0' porque es mucho más corto. – Nobody

Cuestiones relacionadas