Corregir el especificador de formato para el doble en printf
¿Cuál es el especificador de formato correcto para double
en printf? ¿Es %f
o es %lf
? Creo que es %f
, pero no estoy seguro.
Ejemplo de código
#include <stdio.h>
int main()
{
double d = 1.4;
printf("%lf", d); // Is this wrong?
}
448
3
"%f"es el (o al menos un) formato correcto para un double. No hay ningún formato para un
float, porque si intenta pasar un
floata
printf, será promovido a
doubleantes de que
printf` lo reciba1. La norma actual también acepta la expresión "%lf": se especifica que la "l" no tiene efecto si va seguida del especificador de conversión "f" (entre otros).Tenga en cuenta que este es un punto en el que las cadenas de formato
printf
difieren sustancialmente de las cadenas de formatoscanf
(yfscanf
, etc.). Para la salida, está pasando un valor, que será promovido defloat
adouble
cuando se pase como parámetro variadic. Para la entrada se pasa un puntero, que no es promovido, así que hay que decirle ascanf
si se quiere leer unfloat
o undouble
, así que parascanf
,%f
significa que se quiere leer unfloat
y%lf
significa que se quiere leer undouble
(y, por si sirve de algo, para unlong double
, se usa%Lf
paraprintf
oscanf
).Puede ser
%f
,%g
o%e
dependiendo de cómo quiera formatear el número. Vea aquí para más detalles. El modificadorl
es necesario enscanf
condouble
, pero no enprintf
.%Lf
(nótese la "L" mayúscula) es el especificador de formato para dobles largos.Para los dobles simples, se puede utilizar
%e
,%E
,%f
,%g
o%G
.