Pregunta

    

Esta pregunta ya tiene una respuesta aquí:

         

Tengo este código C.

#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;
}

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

¿Fue útil?

Solución

debido a que en esta expresión

t = (1/100) * d;

1 y 100 son valores enteros, número entero trunca división, por lo que este es el mismo que este

t = (0) * d;

tiene por qué 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;

Otros consejos

Está utilizando la división entera, y 1/100 siempre va a bajar y vuelta a cero en la división entera.

Si usted quiere 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 convierte implícitamente por usted:

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

Creo que es debido a

t = (1/100) * d;

1/100 como entero división = 0

0 entonces * d siempre es igual a 0

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

t = (1/100) * d; 

Esto es siempre igual a 0, se puede hacer esto

t=(1%100)*d 

y añadirlo a 0

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top