¿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.
#include <stdio.h>
int main()
{
double d = 1.4;
printf("%lf", d); // Is this wrong?
}
"%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 formato scanf
(y fscanf
, etc.). Para la salida, está pasando un valor, que será promovido de float
a double
cuando se pase como parámetro variadic. Para la entrada se pasa un puntero, que no es promovido, así que hay que decirle a scanf
si se quiere leer un float
o un double
, así que para scanf
, %f
significa que se quiere leer un float
y %lf
significa que se quiere leer un double
(y, por si sirve de algo, para un long double
, se usa %Lf
para printf
o scanf
).
%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
.