El resultado de la división siempre es cero [duplicate]

2 minutos de lectura

avatar de usuario
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)?

  • 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

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

avatar de usuario
Alex

t = (1/100) * d; 

Eso siempre es igual a 0, puedes hacer esto

t=(1%100)*d 

y sumarlo a 0

¿Ha sido útil esta solución?