Correcte formaatspecificatie voor dubbel in printf
Wat is de juiste format specifier voor double
in printf? Is het %f
of is het %lf
? Ik geloof dat het %f
is, maar ik weet het niet zeker.
Code voorbeeld
#include <stdio.h>
int main()
{
double d = 1.4;
printf("%lf", d); // Is this wrong?
}
448
3
"%f"
is het (of ten minste één) correcte formaat voor een double. Er is geen formaat voor eenfloat
, want als je probeert eenfloat
aanprintf
door te geven, wordt het gepromoveerd totdouble
voordatprintf
het ontvangt1."%lf"
is ook acceptabel onder de huidige standaard -- del
is gespecificeerd als geen effect hebbend indien gevolgd door def
conversie specificier (onder andere).Merk op dat dit een plaats is waar
printf
format strings aanzienlijk verschillen vanscanf
(enfscanf
, enz.) format strings. Voor output geef je een waarde door, die wordt gepromoveerd vanfloat
naardouble
als het als een variadic parameter wordt doorgegeven. Voor invoer geef je een pointer door, die niet gepromoveerd wordt, dus je moetscanf
vertellen of je eenfloat
of eendouble
wilt lezen, dus voorscanf
betekent%f
dat je eenfloat
wilt lezen en%lf
dat je eendouble
wilt lezen (en, voor wat het waard is, voor eenlong double
gebruik je%Lf
voor ofwelprintf
ofscanf
).Het kan
%f
,%g
of%e
zijn, afhankelijk van hoe je het getal geformatteerd wilt hebben. Zie hier voor meer details. Del
modifier is vereist inscanf
metdouble
, maar niet inprintf
.%Lf
(let op de hoofdletterL
) is de formaatspecificatie voor lange dubbels.Voor gewone
dubbels
is%e
,%E
,%f
,%g
of%G
voldoende.