Ver Mensaje Individual
  #1 (permalink)  
Antiguo 08/11/2009, 14:19
Avatar de Bazookao
Bazookao
 
Fecha de Ingreso: diciembre-2008
Ubicación: Mexico
Mensajes: 139
Antigüedad: 16 años, 3 meses
Puntos: 1
Pregunta Problema Redondeando un numero

Hola buenas a todos, otra vez aqui molestando para ver si alguien me podria ayudar.

bueno tengo un programa en C++ que necesita una funcion para truncar un numero,a un cierto numero de decimales, por ejemplo:
si tengo 5 me da 5
si tengo 1.333333 me da 1.33 si le digo que 2 deciamles
si tengo 1.666666 me da 1.666 si le digo que 3
si tengo 1.9798 me da 1.97si le digo que 2
si tengo 1.99999999 me da 1.999999 si le digo que 6

tengo don funciones pero ninguna de ellas sirve bien
la primera

Código:
double trucarA(double r,double n_digit)
   {
   int n=pow(10.0,n_digit);
   r=((float)((int)(r*n)))/n;
   return(r);
   }
//y

Código:
double truncarB(double num,int espacio)
{
	int entero,hasta;
	if(espacio>0&&espacio<15)		
		entero=floor(num);
		if(!(num-entero==0))
		{
			char strN[50];
			int i,tamStrN;
			tamStrN=sprintf(strN,"%f",num);
			char strRet[50]="";
			if(tamStrN-2<espacio)
				hasta=tamStrN;
			else
				hasta=espacio+2;
			for(i=0;i<hasta;i++)
			{
				strRet[i]=strN[i];
			}
			return strtod(strRet,NULL);
		}
		else
			return 0;
}
por que estan mal, simple. por que ya cuando regresan el resultado si digamos le pongo
0.33333333333333 a 5 decimales deberia regresar
0.33333

pero desgraciadamente ambas regresan
0.33333000000000002

la segunda si funciona hasta antes de regresar el valor la funcion strtod me manda eso de 0.33333000000000002en lugar de lo que tienen la varible

ya lo he intentado con atof pero me da el mismo problema


y con eso ya le dan en la torre a todo el programa
ayuda

Última edición por Bazookao; 08/11/2009 a las 14:26