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

problema con funcion round ( )

Estas en el tema de problema con funcion round ( ) en el foro de C/C++ en Foros del Web. Lenguaje C buenas, estaba trabajando en un proyecto de la universidad y me e topado con un problema al utilizar la funcion round ( ) ...
  #1 (permalink)  
Antiguo 05/07/2012, 00:10
 
Fecha de Ingreso: mayo-2012
Mensajes: 8
Antigüedad: 12 años, 6 meses
Puntos: 0
Exclamación problema con funcion round ( )

Lenguaje C

buenas, estaba trabajando en un proyecto de la universidad y me e topado con un problema al utilizar la funcion round ( ) que sirve para redondear decimales.
para mi es muy claro su uso cuando solo se le entrega a la funcion 1 argumento, el problema lo tengo cuando a la funcion le entrego 2 argumentos.

por ejemplo : round (3.1421, 2);

se supone que al darle esta instruccion lo que me deberia devolver es el numero pero redondeado a 2 cifras, es decir 3.14, y e consultado en varios lugares y no obtengo respuestas alguna del error que me sale, ya que al intentar compilar el programa me dice que le estoy pasando demasiados argumentos a la funcion round ( ) ."too many arguments to function ‘round’ "

para mi seria de mucha ayuda si me dijeran que solucion implementar para usar de manera adecuada la funcion round cuando le voy a dar 2 argumentos, de igual manera dejare un programa sencillo donde implemento dicha funcion y me da el mismo problema para que lo puedan observar de manera practica.

Código:
#include <stdio.h>
#include <math.h>


int main (void)
{

double numero;
int cifras;

scanf("%lf%d", &numero,&cifras);

numero = round (numero, cifras);

printf("%lf\n", numero);

return 0;
}

gracias por su atencion y espero una respuesta.
  #2 (permalink)  
Antiguo 05/07/2012, 01:13
 
Fecha de Ingreso: junio-2010
Ubicación: Madrid
Mensajes: 620
Antigüedad: 14 años, 6 meses
Puntos: 73
Respuesta: problema con funcion round ( )

El prototipo de la función round es:

double round(double x);

que te devuelve el entero más próximo al argumento. Como puedes ver, solamente acepta un parámetro, y de ahí el error que te indica. La función está implementada así, y no hay nada que puedas hacer.

No indicas para qué quieres el redondeo, si es para presentación de datos o si es porque quieres operar realmente con ese número de cifras decimales.

Si es solamente para presentación de datos, puedes indicar el número total de cifras y el número de decimales al especificar el formato de printf (por defecto, te va a dar 6 cifras decimales):

printf("%10f", x);
10 caracteres en total incluyendo el signo, con 6 cifras decimales (valor por defecto), formato de coma flotante.

printf("%10.3f", x);
10 caracteres en total incluyendo el signo, con 3 cifras decimales, formato de coma flotante.


printf("%12e", x);
12 caracteres en total, con 6 cifras decimales (valor por defecto), formato exponencial. Se incluye el signo, la letra E, el signo del exponente y el exponente.

printf("%12.3e", x);

12 caracteres en total, con 3 cifras decimales, formato exponencial. Se incluye el signo, la letra E, el signo del exponente y el exponente.

Utilizando la letra 'g' en lugar de 'f' ó 'e' se utilizará aquel que resulte en una salida más corta, lo demás es igual.

El signo solamente se imprimirá si es negativo, si es positivo pondrá un espacio en blanco. Poniendo un signo '+' (por ejemplo, printf("%+f", x) imprimirá siempre el signo (positivo o negativo).

Si la cantidad a imprimir necesita más caracteres que los especificados en el formato, pasará de la especificación de formato e imprimirá todos los caracteres que necesite, pero el número de cifras decimales te lo va a respetar siempre.

Ojo, el redondeo te lo va a hacer solamente de cara a la salida de datos, internamente la variable sigue igual.

Si lo que quieres es operar con las cantidades redondeadas, tendrías que hacerte el redondeo "a mano", por ejemplo para redondear a dos cifras decimales:

1. Multiplica por 100
2. Redondea el resultado con round()
3. Divide por 100

Comentario final: Para imprimir números de tipo double no es necesario utilizar el especificador %lf en printf, basta con %f. El especificador %lf sí que es necesario en scanf.
  #3 (permalink)  
Antiguo 05/07/2012, 12:11
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 13 años
Puntos: 94
Respuesta: problema con funcion round ( )

round??? y esa funcion? no la conocia.. supongo que no es estandar o si??


Saludos
  #4 (permalink)  
Antiguo 05/07/2012, 13:58
 
Fecha de Ingreso: junio-2010
Ubicación: Madrid
Mensajes: 620
Antigüedad: 14 años, 6 meses
Puntos: 73
Respuesta: problema con funcion round ( )

Sí, tienes (en math.h, compilador GNU C 4.4.1 con Codeblocks):

double ceil(double x)
double floor(double x)
double round(double x)
double trunc(double x)
  #5 (permalink)  
Antiguo 05/07/2012, 15:40
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 13 años
Puntos: 94
Respuesta: problema con funcion round ( )

Gracias por el dato. ceil y floor si las conocia, el resto no

Saludos
  #6 (permalink)  
Antiguo 11/07/2012, 22:09
 
Fecha de Ingreso: julio-2012
Mensajes: 133
Antigüedad: 12 años, 5 meses
Puntos: 22
Respuesta: problema con funcion round ( )

Hola JotadeXD.

Si deseas redondear internamente un número, es decir de forma efectiva, a N decimales podes hacer:
Código:
#include<math.h> /* pow */

double RoundNdig(double Num, int nDec)
{
  return ((float)((int)(Num * pow(10, nDec) + 0.5))) / pow(10, nDec);
}
Por ejemplo la línea:
Código:
  printf("%8.8f", RoundNdig(3.141592654, 4));
Daría por resultado:
Cita:
3.14160000
Saludos.

Etiquetas: funcion, int, lenguaje, programa, round
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 12:11.