C/Visual C - No me sirve la solucion

 
Vista:

No me sirve la solucion

Publicado por yo (4 intervenciones) el 10/02/2002 20:32:28
Alexis legun, te agradezco mucho tu respuesta pero sigo teniendo errores, porq a la hora de operar con el valor del float utiliza todos los decimale con lo cual me trunca el resultado final, por ejemplo:
#include <stdio.h>
void main (void)
{
float pre,efec,resto,res;
printf(\"Introduzca el precio del articulo o producto:\");
scanf(\"%f\",&pre);
printf(\"\\nEl precio es %.2f euros.\\n\\nIntroduzca la cantidad entregada para pagar:\",pre);
scanf(\"%f\",&efec);
resto=efec-pre;
printf(\"\\nLa cantidad entregada es %.2f euros.\\n\\nLe devolveran %.2f euros.\\n\",efec,resto);

En este ejemplo si introduces por ejemplo precio del articulo 30.8 y la cantidad entregada para pagar 50 euros. el resutado q te muestra es el adecuado pero el valor q almacena no con lo cual si quieres seguir operando con ese valor ya arrastras un pequeño erros, en en este ejemplo tras diversas operaciones su puede convertir en un o dos centimos de euro.


Mi pregunta es como evitar que el float rellene con numeros aleatorios el resto de decimales. Lo de q muestre solo dos esta bien pero no me soluciona el problema.

Muchas gracias por adelantado.

Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:No me sirve la solucion

Publicado por Alexis Leung (70 intervenciones) el 11/02/2002 19:07:32
Bueno primero mi apellido es Leung y no legun, aunque no importa (mucha gente se equivoca). Mira, no capté muy bien lo que me quisiste decir, mejor envíame tu programa con un comentarios en donde falla o donde está el problema y así lo chequeo y te lo envío. Mientras más pronto mejor, porque en estos días de carnavales tengo un poco más de tiempo libre.

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:No me sirve la solucion

Publicado por fremen (9 intervenciones) el 11/02/2002 23:08:40
Hola :)
Creo recordar q el tipo float, te repito CREO, no puede tener tanta precision como intentas q tenga,el sistema pone el valor mas cercana q pueda. Si por ejemplo el valor q quieres guardar es 3.456, el sistema no puedo guardar el 3.456000000 sino q guardara el valor mas cercano q pueda representar, por ejemplo el 3.456001111.
Osea q por ejemplo el sistema antes este rango de valores : 3.455999999 y el 3.456002222 devolvera siempre el mismo numero => 3.456001111
Si estoy en lo cierto... usa double o multiplica por 10 para quitarte todos los decimales :)
Espero haberme explicado :)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

t envio el codgo leung la sol d fremen bastt buena

Publicado por yo (4 intervenciones) el 13/02/2002 21:30:24
#include <stdio.h>
#include <math.h>
void main (void)
{
int i, sw=0,n=0,ideal[100];
float pre,efec,resto,res;
float cartera[]={500.00,200.00,100.00,50.00,20.00,10.00,5.00,2.00,1.00,0.50,0.20,0.10,0.05,0.02,0.01};
printf("Introduzca el precio del articulo o producto:");
scanf("%f",&pre);
printf("\nEl precio es %.2f euros.\n\nIntroduzca la cantidad entregada para pagar:",pre);
scanf("%f",&efec);
resto=efec-pre;
printf("\nLa cantidad entregada es %.2f euros.\n\nLe devolveran %.2f euros.\n",efec,resto);
do
{
ideal[n]=resto/cartera[n];
res=fmod(resto, cartera[n]);
resto=resto-(ideal[n]*cartera[n]);
n++;
if ((ideal[n-1]==0)&&(res<0.01))
{
sw=1;
printf("\nLa devolucion ideal es:\n");
for(i=0;i<=n-1;i++)
{
if (i<=6)
{
if(ideal[i]!=0)
{
printf("%3d billetes de %10f euros que son %19f euros\n",ideal[i], cartera[i],ideal[i]*cartera[i]);
}
}
else if((6<i)&&(i<=8))
{
if(ideal[i]!=0)
{
printf("%3d monedas de %10f euros que son %19f euros\n",ideal
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar