C/Visual C - redondeo()

 
Vista:

redondeo()

Publicado por eduardo (82 intervenciones) el 18/10/2007 22:19:15
Hola a todos tengo un problemilla con un pequenio programa que redondea
numeros y no logro entender porque no funciona para ciertos datos de
entrada:

aqui el programa completo:

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <conio.h>
#include <math.h>

float RedondearAentero( float numero );
float RedondearAdecimas( float numero );
float RedondearAcentesimas( float numero );
float RedondearAmilesimas( float numero );

int main( void )
{

float numero;
char opc;


menu:
system( "cls" );
printf( "\tLa funcion floor() puede usarse para redondear un\n"
"\tnumero a una posicion decimal determinada\n\n" );

printf( " e. RedondearAentero ( x )\n"
" d. RedondearAdecimas ( x )\n"
" c. RedondearAcentesimas( x )\n"
" m. RedondearAmilesimas ( x )\n\n" );
printf( " Valor x : " );
scanf( "%f", &numero );

printf( " Opcion : " );
do
opc = tolower( getch() );
while( opc != 'e' && opc != 'd' && opc != 'c' && opc != 'm' );
printf( "\n\n" );


switch( opc ) {
case 'e':
printf( " %f RedondearAentero --> %f\n", numero,
RedondearAentero( numero ) );
getch();
goto menu;
case 'd':
printf( " %f RedondearAdecimas --> %f\n", numero,
RedondearAdecimas( numero ) );
getch();
goto menu;
case 'c':
printf( " %f RedondearAcentesimas --> %f\n", numero,
RedondearAcentesimas( numero ) );
getch();
goto menu;
case 'm':
printf( " %f RedondearAmilesimas --> %f\n", numero,
RedondearAmilesimas( numero ) );
getch();
goto menu;
}


return 0;
}

float RedondearAentero( float numero ) {
float redon;

redon = floor( numero + 0.5 );

return redon;
}

float RedondearAdecimas( float numero ) {
float redon;

redon = floor( numero * 10 + 0.5 ) / 10;

return redon;
}

float RedondearAcentesimas( float numero ) {
float redon;

redon = floor( numero * 100 + 0.5 ) / 100;

return redon;
}

float RedondearAmilesimas( float numero ) {
float redon;

redon = floor( numero * 1000 + 0.5 ) / 1000;

return redon;
}

Funciona bien para la mayoria pero cuando deseo
redondear a DECIMAS numero como
2.35
3.35
4.35 etc
arroja el mismo numero excepto para 1.35( q si lo redondea)
se suponne que deberia redondear los otros correctamente
no entiendo porque no lo hace ya probe con double
y nada .. como lo soluciono..

Gracias desde ya por su ayuda.
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:redondeo()

Publicado por Tom (619 intervenciones) el 19/10/2007 08:13:41
No sé, pero prueba, mejor con:

redon = floor( numero * 10.0 + 0.5 ) / 10.0;
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