2010-02-27 7 views
15

Recibí este código C.El resultado de la división siempre es cero

#include <stdio.h> 

int main(void) 
{ 
     int n, d, i; 
     double t=0, k; 
     scanf("%d %d", &n, &d); 
     t = (1/100) * d; 
     k = n/3; 
     printf("%.2lf\t%.2lf\n", t, k); 
     return 0; 
} 

Quiero saber por qué mi variable 't' siempre es cero (en la función printf)?

+0

Vea también http://stackoverflow.com/questions/1580332/stdpow-gives-a-wrong-approximation-for-fractional-exponents/1580344 – GManNickG

+0

lol - división entera en c fue mi primer rascador de cabeza también. No stack over flow entonces - solo un prof sin humor –

Respuesta

23

porque en esta expresión

t = (1/100) * d; 

1 y 100 son valores enteros, formas truncadas de la división de enteros, por lo que este es el mismo ya que esto

t = (0) * d; 

necesita hacer que una constante de flotación como esto

t = (1.0/100.0) * d; 

también puede querer hacer lo mismo con este

k = n/3.0; 
+9

O simplemente usa 'd/100.0'. – Joey

0

Está utilizando la división de enteros, y 1/100 siempre redondeará a cero en la división de enteros.

Si quisiera hacer una división en coma flotante y simplemente truncar el resultado, puede asegurarse de que está utilizando literales puntero flotando en su lugar, y D se convertirá implícitamente para usted:

t = (int)((1.0/100.0) * d); 
0

Creo que es debido a

t = (1/100) * d; 

1/100 como división entera = 0

luego 0 * d siempre s es igual a 0

si lo hace 1.0/100,0 creo que va a funcionar correctamente

-2
t = (1/100) * d; 

que está siempre igual a 0, se puede hacer esto

t=(1%100)*d 

y añadirlo a 0

+0

Bienvenido a Stack Overflow. Si decide responder una pregunta anterior con respuestas correctas y bien establecidas, agregar una nueva respuesta tarde en el día puede no darle ningún crédito. Si tiene alguna nueva información distintiva, o está convencido de que las otras respuestas son incorrectas, agregue una nueva respuesta, pero "otra respuesta más" con la misma información básica seis años y medio después de que se formuló la pregunta ganó no le gano mucho crédito. –

Cuestiones relacionadas