Duda con "cast" en C

Iniciado por diegoCmC, 18 Febrero 2012, 17:08 PM

0 Miembros y 1 Visitante están viendo este tema.

diegoCmC

Me parece que no entendi bien del todo eso del cast, ilustro mi idea con codigo a ver si alguien me puede corregir

Citar#include<stdio.h>

main()
{
      float numero=12.5, numero2=1.2;
      int division;
     
      division=(int)numero/numero2;
     
      printf("El valor de la division es %d\n", division);
     
      system("pause");
      return 0;
}

Cuando ejecuto este código, la idea que tengo yo es, que antes de realizar la división numero/numero2, lo que realiza es convertir numero a un entero de valor 12, y numero2 a un entero de valor 1, por lo tanto al dividirlos se almacenaria el resultado, 12, en la variable división, pero sin embargo el programa me muestra como resultado 9.
A ver is alguien puede ayudarme
a todas las que me abrieron su coraza traeles suerte
ya no creo en el amor pero querria volver a verte

Eternal Idol

#1
Para que haga lo que queres numero2 tiene que ser entero, a ver si asi lo ves mas claro:
division = (int)numero / (int)numero2;
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

diegoCmC

ahhh vale, ya entiendo lo que me pones, gracias.
Ahora como curiosidad, como lo tenia yo, por que el resultado es 9??
a todas las que me abrieron su coraza traeles suerte
ya no creo en el amor pero querria volver a verte

Caster

Yo sabía lo de Eternal Idol pero, me entra la imsa duda que a diego.

Saludos

diegoCmC

claro, es que 12/1.2=10 no se por que pone 9 :S
a todas las que me abrieron su coraza traeles suerte
ya no creo en el amor pero querria volver a verte

Eternal Idol

Es un problema de precision, si usas double te va a dar 10, con float la division da algo asi como 9.99999960263572 ...
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

farresito

Sí. Como bien dice Eternal, a nivel muy bajo, el procesador tiene problemas de precisión. Si tienes que hacer casts con el int, por ejemplo, a veces va bien sumar 0.0001 o algo así. Cifras bajas.. Recuerda que un cast NO es redondear, es TRUNCAR (quitar todos los decimales a secas). Si tienes 10.0001 y haces un cast de int, te saldra 10, pero si tienes 9.99999, te quedaras con el 9.

Un abrazo.