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.
#include <stdio.h>
int main()
{
double d = 1.4;
printf("%lf", d); // Is this wrong?
}
"%f"
is het (of ten minste één) correcte formaat voor een double. Er is geen formaat voor een float
, want als je probeert een float
aan printf
door te geven, wordt het gepromoveerd tot double
voordat printf
het ontvangt1. "%lf"
is ook acceptabel onder de huidige standaard -- de l
is gespecificeerd als geen effect hebbend indien gevolgd door de f
conversie specificier (onder andere).
Merk op dat dit een plaats is waar printf
format strings aanzienlijk verschillen van scanf
(en fscanf
, enz.) format strings. Voor output geef je een waarde door, die wordt gepromoveerd van float
naar double
als het als een variadic parameter wordt doorgegeven. Voor invoer geef je een pointer door, die niet gepromoveerd wordt, dus je moet scanf
vertellen of je een float
of een double
wilt lezen, dus voor scanf
betekent %f
dat je een float
wilt lezen en %lf
dat je een double
wilt lezen (en, voor wat het waard is, voor een long double
gebruik je %Lf
voor ofwel printf
of scanf
).
Het kan %f
, %g
of %e
zijn, afhankelijk van hoe je het getal geformatteerd wilt hebben. Zie hier voor meer details. De l
modifier is vereist in scanf
met double
, maar niet in printf
.
%Lf
(let op de hoofdletter L
) is de formaatspecificatie voor lange dubbels.
Voor gewone dubbels
is %e
, %E
, %f
, %g
of %G
voldoende.