Jaki jest poprawny specyfikator formatu dla double
w printf? Czy jest to %f
czy %lf
? Wierzę, że to'jest %f
, ale nie jestem pewien.
#include <stdio.h>
int main()
{
double d = 1.4;
printf("%lf", d); // Is this wrong?
}
"%f"
jest (lub przynajmniej jednym) poprawnym formatem dla double. Nie ma* formatu dla float
, ponieważ jeśli próbujesz przekazać float
do printf
, to'zostanie on awansowany do double
zanim printf
go otrzyma1. "%lf"
jest również akceptowalne w obecnym standardzie -- l
jest określone jako nie mające żadnego efektu, jeśli następuje po nim specyfikator konwersji f
(między innymi).
Zauważ, że jest to jedno miejsce, w którym łańcuchy formatu printf
różnią się znacząco od łańcuchów formatu scanf
(i fscanf
, itd.). Na wyjściu przekazujesz wartość, która zostanie zmieniona z float
na double
, gdy zostanie przekazana jako parametr variadic. Na wejściu przekazujesz pointer, który nie jest promowany, więc musisz powiedzieć scanf
czy chcesz odczytać float
czy double
, więc dla scanf
, %f
oznacza, że chcesz odczytać float
a %lf
oznacza, że chcesz odczytać double
(i dla tego co jest warte, dla long double
, używasz %Lf
dla printf
lub scanf
).
Może to być %f
, %g
lub %e
, w zależności od tego, jak chcesz, by liczba była sformatowana. Zobacz tutaj po więcej szczegółów. Modyfikator l
jest wymagany w scanf
z double
, ale nie w printf
.
%Lf
(zauważ dużą literę L
) jest specyfikatorem formatu dla długich liczb podwójnych.
Dla zwykłego dwukrotnego
, albo %e
, %E
, %f
, %g
lub %G
.