Hvad er den korrekte formatangivelse for double
i printf? Er det %f
eller er det %lf
? Jeg tror, det er %f
, men jeg er ikke sikker.
#include <stdio.h>
int main()
{
double d = 1.4;
printf("%lf", d); // Is this wrong?
}
"%f"
er det (eller i det mindste et) korrekt format for en double. Der er ikke noget format for en float
, for hvis du forsøger at sende en float
til printf
, vil den blive forfremmet til double
, før printf
modtager den1. &"%lf"
er også acceptabel i henhold til den nuværende standard - l
er specificeret som værende uden virkning hvis den efterfølges af konverteringsangivelsen f
(blandt andet).
Bemærk, at dette er et sted, hvor printf
-formatstrenge adskiller sig væsentligt fra scanf
(og fscanf
, osv.) formatstrenge. Til output overdrager du en værdi, som vil blive forfremmet fra float
til double
, når den overdrages som en variadisk parameter. For input overdrager du en pointer, som ikke promoveres, så du skal fortælle scanf
om du vil læse en float
eller en double
, så for scanf
betyder %f
at du vil læse en float
og %lf
at du vil læse en double
(og, for hvad det er værd, for en long double
, bruger du %Lf
for enten printf
eller scanf
).
Det kan være %f
, %g
eller %e
, afhængigt af hvordan du ønsker, at tallet skal formateres. Se her for flere detaljer. Modifikatoren l
er påkrævet i scanf
med double
, men ikke i printf
.
%Lf
(bemærk det store L
) er formatspecifikator for lange doubler.
For almindelige doubles
er enten %e
, %E
, %f
, %g
eller %G
tilstrækkeligt.