8
votes

Arrondir des flotteurs avec ostringstream

J'ai un problème concernant la conversion de Float sur C ++ String à l'aide d'Ostringstream. Voici ma ligne:

void doSomething(float t)
{
    ostringstream stream; 
    stream << t;
    cout << stream.str();
}


4 commentaires

Pourquoi ne passez-vous pas le flotteur directement à COUT ?


@ En Silico, j'aimerais en fait utiliser cette valeur à un moment donné de mon code.


@In Silico, qu'est-ce que vous dites réellement ne fonctionne pas.


C'est pourquoi c'est un commentaire, pas une réponse. :-) Je ne savais pas que le COUT est à des fins de débogage.


4 Réponses :


7
votes

Si vous souhaitez qu'un nombre particulier de chiffres significatifs affichés, essayez d'utiliser SETPRecision (N) où N est le nombre de chiffres significatifs que vous souhaitez.

#include <iomanip>

void doSomething(float t)
{
    ostringstream stream; 
    stream << std::setprecision(4)  << t;
    cout <<  stream.str();
}


0 commentaires

17
votes

Vous devez définir la précision pour Ostringstream à l'aide de précision

par exemple xxx


5 commentaires

J'ai eu une solution pour 0,0999, mais pour le nombre de 7,9E-08, je reçois toujours la même chose. Alors, que peut être la solution pour cela.


Vous devez définir une précision au flux lui-même. I.e. Stream.Precision (3);


Je fais la même chose. Voici mon code: Stream d'Ostringstream; Stream.Precision (1); Stream << t; COUT << ENDL << "Valeur:" << stream.str ();


D'accord, utilisez une précision fixe. E.g, flux.Precision (8); Stream << Fixe; Stream << t; COUT << ENDL << "Valeur:" << stream.str ();


Quelle est la précision par défaut pour ostringstream?



0
votes

Utilisez SETPRecision :

stream << setprecision(5) <<t ;


1 commentaires

J'ai eu une solution pour 0,0999, mais pour le nombre de 7,9E-08, je reçois toujours la même chose. Alors, que peut être la solution pour cela.



2
votes

Si vous souhaitez un point fixe au lieu de la notation scientifique, utilisez std :: fixe : xxx

Vous pouvez également définir la précision comme mentionné.


0 commentaires