chaîne de format %g dans C

Comment puis-je créer une chaîne afin qu'elle les formats des nombres à virgule flottante ont pas de virgule décimale de fin ou de chiffres, quand il est un entier, mais pour ne PAS passer à la notation scientifique pour un plus grand nombre?

Quand je fais:

float myFloat= 15.6f;
float myInt = 5.0f;
float myLarge = 7000000.0f;
sprintf(out, "my float is %g", myFloat);
sprintf(out, "my int is %g", myInt);
sprintf(out, "my large is %g", myLarge);

Je reçois quelque chose comme:

mon flotteur est de 15,6 
mon int est de 5 
mon grand est 7e+07f 

Je souhaite à tous une seule chaîne de format qui donnera 15.6, 5, et 700000.

Édité cause des commentaires de ne pas faire de mise en forme:

qu'est ce que je pensais. mais un wrapper est assez gênant même si, comme les chaînes de format sont intégrés dans de plus longues chaînes de format:

sprintf(buf, "%d %g", myInt, myFloat);

comment avez-vous l'envelopper?

sprintf(buf, "%d %g", myInt, Wrapper(myFloat));??

ce qui devrait Wrapper de retour? Ou pire:

sprintf(buf, "%d %s", myInt, Wrapper(myFloat));?? 
Si vous utilisez %.*f, alors vous avez juste à faire: sprintf(buf, "%d %.*f", myint, getPlaces(myFloat), myFloat); Pas besoin d'un wrapper pour générer des chaînes de format.

OriginalL'auteur sean riley | 2009-05-06