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