Mai mult
Specificatorul de format corect pentru double în printf
Care este specificatorul de format corect pentru double
în printf? Este %f
sau %lf
? Cred că este %f
, dar nu sunt sigur.
Code sample
#include <stdio.h>
int main()
{
double d = 1.4;
printf("%lf", d); // Is this wrong?
}
448
3
"%f"
este formatul (sau cel puțin unul) corect pentru un dublu. Nu există niciun format pentru unfloat
, deoarece dacă încercați să treceți unfloat
laprintf
, acesta va fi promovat ladouble
înainte caprintf
să-l primească1."%lf"`` este, de asemenea, acceptabil în conformitate cu standardul actual -- se specifică faptul că
lnu are niciun efect dacă este urmat de specificatorul de conversie
f` (printre altele).Rețineți că acesta este un loc în care șirurile de format
printf
diferă substanțial de șirurile de formatscanf
(șifscanf
, etc.). Pentru ieșire, treceți o valoare, care va fi promovată dinfloat
îndouble
atunci când este trecută ca parametru variadic. Pentru intrare, treceți un pointer, care nu este promovat, așa că trebuie să îi spuneți luiscanf
dacă doriți să citiți unfloat
sau odouble
, astfel încât pentruscanf
,%f
înseamnă că doriți să citiți unfloat
și%lf
înseamnă că doriți să citiți odouble
(și, dacă mai contează, pentru unlong double
, folosiți%Lf
fie pentruprintf
, fie pentruscanf
).Acesta poate fi
%f
,%g
sau%e
, în funcție de modul în care doriți să formatați numărul. Consultați aici pentru mai multe detalii. Modificatorull
este necesar înscanf
cudouble
, dar nu și înprintf
.%Lf
(observați majusculaL
) este specificatorul de format pentru long doubles.Pentru
double
simple, este suficient%e
,%E
,%f
,%g
sau%G
.