resultado de la división es siempre cero [duplicado]
-
23-09-2019 - |
Pregunta
Esta pregunta ya tiene una respuesta aquí:
- Dividing 1 / n siempre devuelve 0,0 [duplicado] 3 respuestas
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)?
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