vaioisborn
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;
}
Quiero saber por qué mi variable ‘t’ siempre es cero (en la función printf)?
porque en esta expresión
t = (1/100) * d;
1 y 100 son valores enteros, la división de enteros se trunca, así que esto es lo mismo que esto
t = (0) * d;
necesitas hacer que sea una constante flotante como esta
t = (1.0/100.0) * d;
es posible que también desee hacer lo mismo con este
k = n / 3.0;
-
O simplemente usa
d / 100.0
.– joey
27 de febrero de 2010 a las 1:42
-
En mi situación, esto es lo que terminé haciendo para dejar de obtener 0 en mi división:
Double ratio = (Convert.ToDouble(x) / Convert.ToDouble(y));
– Cristóbal
18 oct 2018 a las 10:21
-
@ChristopherD.Emerson Eso es C#; esta pregunta es sobre C (y también se aplica a C++).
– TamaMcGlinn
9 de agosto de 2020 a las 20:48
Estás usando la división de enteros, y 1/100 siempre se redondeará a cero en la división de enteros.
Si desea hacer una división de punto flotante y simplemente truncar el resultado, puede asegurarse de que está utilizando literales de puntero flotante en su lugar, y d se convertirá implícitamente para usted:
t = (int)((1.0 / 100.0) * d);
creo que es por
t = (1/100) * d;
1/100 como división entera = 0
entonces 0 * d siempre es igual a 0
si haces 1.0/100.0 creo que funcionará correctamente
Alex
t = (1/100) * d;
Eso siempre es igual a 0, puedes hacer esto
t=(1%100)*d
y sumarlo a 0
Ver también stackoverflow.com/questions/1580332/…
– GManNickG
27 de febrero de 2010 a las 1:41
lol – la división de enteros en c también fue mi primer rascador de cabeza. Entonces no hay stack over flow, solo un profesor sin sentido del humor.
– Shane C. Mason
27 de febrero de 2010 a las 1:42