Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Problema Redondeando un numero

Estas en el tema de Problema Redondeando un numero en el foro de C/C++ en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 08/11/2009, 14:19
Avatar de Bazookao  
Fecha de Ingreso: diciembre-2008
Ubicación: Mexico
Mensajes: 139
Antigüedad: 15 años, 5 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
  #2 (permalink)  
Antiguo 09/11/2009, 09:28
Avatar de Claw  
Fecha de Ingreso: abril-2009
Mensajes: 299
Antigüedad: 15 años
Puntos: 9
Respuesta: Problema Redondeando un numero

Te sugiero algo que yo haría "a priori" (aunque fuera ineficiente y todo lo que se quiera).

1. Obtengo mi número con infinitos decimales
2. Yo quiero truncarlo en, supongamos, 3 decimales.
3. Convierto el número con infinitos decimales a una string (C++) o de tipo char (C). Por ejemplo haciendo:

float data;
char bur[100];
sprint(buf,"%f", data);

4. Corto la ristra resultante hasta el número de decimales que me hayan dicho. Como en mi ejemplo quiero tres, pues busco el caracter "." (punto) y de ahí en adelante avanzo tres y corto. Por tanto, si tenía 3.11123456 me quedaría 3.111 ("23456" no entraría).
5. Reconviertes a float el resultado (atof)

Salu2!

PD: función atof [http://www.conclase.net/c/librerias/....php?fun=atof]
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:35.