Więcej
Poprawny specyfikator formatu dla double w printf
Jaki jest poprawny specyfikator formatu dla double
w printf? Czy jest to %f
czy %lf
? Wierzę, że to'jest %f
, ale nie jestem pewien.
Próbka kodu
#include <stdio.h>
int main()
{
double d = 1.4;
printf("%lf", d); // Is this wrong?
}
448
3
"%f"
jest (lub przynajmniej jednym) poprawnym formatem dla double. Nie ma* formatu dlafloat
, ponieważ jeśli próbujesz przekazaćfloat
doprintf
, to'zostanie on awansowany dodouble
zanimprintf
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 konwersjif
(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 formatuscanf
(ifscanf
, itd.). Na wyjściu przekazujesz wartość, która zostanie zmieniona zfloat
nadouble
, 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
czydouble
, więc dlascanf
,%f
oznacza, że chcesz odczytaćfloat
a%lf
oznacza, że chcesz odczytaćdouble
(i dla tego co jest warte, dlalong double
, używasz%Lf
dlaprintf
lubscanf
).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. Modyfikatorl
jest wymagany wscanf
zdouble
, ale nie wprintf
.%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
.