Ver Mensaje Individual
  #2 (permalink)  
Antiguo 05/07/2012, 01:13
Fw190
 
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.