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

Redondear un double a 3 digitos cbuilder

Estas en el tema de Redondear un double a 3 digitos cbuilder en el foro de C/C++ en Foros del Web. Hola amigos, estaba intentando redondear un numero double a 3 digitos y no he podido. con la funcion floor devuelve un entero e igual con ...
  #1 (permalink)  
Antiguo 17/09/2008, 18:37
 
Fecha de Ingreso: marzo-2007
Mensajes: 129
Antigüedad: 17 años, 1 mes
Puntos: 0
Redondear un double a 3 digitos cbuilder

Hola amigos, estaba intentando redondear un numero double a 3 digitos y no he podido.

con la funcion floor devuelve un entero e igual con la funcion ceil, sera que alguien sabe alguna funcion que me ayude por favor

double a=1.2345678

alguna que me devuelva

1.234

ESTOY TRABAJANDO CON BORLAND C++ BUILDER

De antemanos gracias ;)
__________________
Software Analyst and developer
http://ebalestrini.com
  #2 (permalink)  
Antiguo 17/09/2008, 20:46
Avatar de antoniog  
Fecha de Ingreso: junio-2006
Mensajes: 118
Antigüedad: 17 años, 10 meses
Puntos: 4
Respuesta: Redondear un double a 3 digitos cbuilder

Hola,

La verdad pienso que 1.2345678 redondeado a tres cifras es 1.235.

Que pasa si 1.2345678 lo multiplicas por 1000?
te da 1234.5678
Y si lo truncas? (o sea, te quedas solo con los enteros)
pues da 1234
fijate que ahi estan las cifras que tu quieres
ahora divide por 1000 y quedara el resultado que quieres.

Es decir, el algoritmo para lo que quieres es
Código:
truncar a entero a*1000
dividir el numero por 1000
Si quieres que salga redondeado asi como yo pienso que debe ser,lo que debes hacer es
Código:
truncar a entero (a*1000+0.5)
dividir el numero por 1000
Saludos
__________________
Mis pininos en blogs: prog en C, cursos

Última edición por antoniog; 25/10/2009 a las 13:20
  #3 (permalink)  
Antiguo 18/09/2008, 15:22
 
Fecha de Ingreso: marzo-2007
Mensajes: 129
Antigüedad: 17 años, 1 mes
Puntos: 0
Respuesta: Redondear un double a 3 digitos cbuilder

creo que algo mucho mas sencillo que lo que tu acabas de hacer es una funcion llamada round(numero,cantidaddigitos)

pero no se el nombre de esta funcion en cbuilder! eso eslo que busco dicha funcion
__________________
Software Analyst and developer
http://ebalestrini.com
  #4 (permalink)  
Antiguo 18/09/2008, 16:44
Avatar de antoniog  
Fecha de Ingreso: junio-2006
Mensajes: 118
Antigüedad: 17 años, 10 meses
Puntos: 4
Exclamación Respuesta: Redondear un double a 3 digitos cbuilder

Hola,

En CBuilder no existe esa funcion (tiene la misma libreria math.h que otros compiladores de C)

Pero bueno, al parecer se te hace complicada la funcion, asi que yo te la pongo aqui:
Código:
#include<math.h> //<--necesitas esta libreria para la potencia

double round(double r,int n_digit)
   {
   int n=pow(10,n_digit);
   r=((float)((int)(r*n+0.5)))/n;
   return(r);
   }
Si quieres que aparezca como tu dices, pues quita el "+0.5" en la funcion round

Saludos
__________________
Mis pininos en blogs: prog en C, cursos

Última edición por antoniog; 25/10/2009 a las 13:21
  #5 (permalink)  
Antiguo 20/09/2008, 09:33
 
Fecha de Ingreso: marzo-2007
Mensajes: 129
Antigüedad: 17 años, 1 mes
Puntos: 0
Respuesta: Redondear un double a 3 digitos cbuilder

muchas gracias fue de gran ayuda! ya comprendi todo
__________________
Software Analyst and developer
http://ebalestrini.com
  #6 (permalink)  
Antiguo 21/03/2010, 21:30
 
Fecha de Ingreso: marzo-2010
Mensajes: 2
Antigüedad: 14 años, 1 mes
Puntos: 0
Información Respuesta: Redondear un double a 3 digitos cbuilder

mira para eso es sencillo primero inclulles la libreria <iomanip.h>
despues agregas la using de esta forma using std::setprecision;

y en el momento que bayas a mostrar el contenido ante de que lo muestres escribes << setprecision(4) << aqui en nombre de la variable que tiene contenido el valor y se te mostrara a como tu quieres 1.232
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 00:59.