sprintf mise en forme de la double valeur

J'ai un problème lors de la conversion double valeurs à l'aide de la chaîne sprintf() dans UNIX.

Par exemple, j'ai deux valeurs:

double a = 0.009984354523452;
double b = 0.01;

Lors de la conversion, je suis en utilisant:

sprintf(somestringvar, "Double value : %.15f \n", a);
sprintf(diffstringvar, "Double value : %.15f \n", b);

pour convertir une chaîne de caractères.

Mon problème est pour le "a", la valeur est l'impression correctement, mais pour la valeur de 'b', ' 0 ' sont ajoutés à la fin de la queue. Merci de me fournir toute façon courante de représenter le " a " et " b " comme des valeurs exactes.

Je voudrais utiliser std::ostringstream pour ce genre de chose.
Et, en général, ne pas utiliser de sprintf(), car il peut conduire à des dépassements de mémoire tampon. Utilisation snprintf() à la place, ou l'un des _s "safe" versions de Microsoft fournit sous Windows. p.s. Bienvenue à Débordement de Pile!
Salut merci pour les réponses précoces. ostringstream ne prend pas toute la précision. une valeur est l'impression que 0.009976 seulement. Je peux utiliser snprintf() mais le problème est lors de l'impression des valeurs correctement.
Une autre chose que vous devez être au courant: En général, les nombres à virgule flottante pas être représentés exactement parce que la mantisse n'a qu'une longueur finie. E. g. printf("1/10 = %.50f\n", 0.1); résultats suivants sur ma machine: d = 0.10000000000000000555111512312578270211815834045410. Vous voudrez peut-être lire sur le représentation à virgule flottante.
Il a été de précieux renseignements. C'est vrai que les nombres à virgule flottante ne peut pas être représenté exactement, mais je suis juste essayer d'imprimer les valeurs quelles qu'en soient là, en particulier variable de type double. Suis réellement accès aux données à partir de la base de données, dans ce cas, j'ai l'impression à l'utilisateur exactement que ce qui est là dans la base de données. Mais pas par la "normalisation" ou de "tronquer" ou par "ajoutant des zéros à la queue". Par l'utilisation de %g ou %f ou ostringstream les valeurs sont normalisées et tronquée (comme 0.009984354523452 comme 0.009984) si j'utilise %.20f grandes valeurs sont bien, mais les petits comme 0.01 comme 0.0100..... avec 18 zéros

OriginalL'auteur sandy | 2012-04-26