2 votes

Conversion des nombres flottants en une chaîne formatée

Je cherche à convertir un nombre double en une std::string, la conversion devrait s'afficher soit au format décimal avec 2 chiffres décimaux, soit sous forme exponentielle :

  1. 1 -> 1.00
  2. 0.1 -> 0.10
  3. 0.01 -> 0.01
  4. 0.015 -> 1.5e-2
  5. 10 -> 10.00
  6. 100 -> 100.00
  7. 15000 -> 1.5e4

J'ai essayé d'utiliser la fonction boost::format avec le type %g, mais bien qu'il soit possible de définir le nombre de chiffres significatifs, il n'est pas possible de définir le nombre de chiffres imprimés après le point décimal :

  1. 1 -> 1
  2. 0.1 -> 0.1
  3. 0.01 -> 0.01
  4. 10 -> 10
  5. 100 -> 100

Existe-t-il un meilleur moyen de réaliser ce type de conversion/formatage ? Je préférerais utiliser la bibliothèque Standard ou Boost.

4voto

Cheers and hth. - Alf Points 59647

Choisissez scientific ou fixed en fonction de la taille du nombre.

C'est aussi simple que cela.

Santé & cordialement.,

3voto

AJG85 Points 7689

Pas besoin de boost même s'il devrait être possible de le faire avec boost::format ou sprintf si vous le souhaitez.

#include 
#include 

int main()
{
    std::string numStr("3.14159265");
    double num(atof(numStr.c_str()));
    std::cout
        << std::setprecision(2) 
        << std::scientific << num
        << std::fixed << num;
    return 0;
}

Édit: J'ai mal lu la question, si vous voulez convertir un double en std::string, j'utiliserais un std::ostringstream qui prend en charge les mêmes manipulateurs iostream et l'opérateur d'insertion. Ensuite, vous pouvez appeler str() pour obtenir une chaîne de caractères.

1voto

James Eldridge Points 287

Vous pouvez utiliser ostringstream, comme ceci

#include <sstream>
#include <string>

std::string FloatToString(float fNumber)
{
    std::ostringstream os;

    os << fNumber;

    return os.str();
}

0voto

TVOHM Points 2326

Je ne suis pas sûr que cela soit ce que vous recherchez mais... Vous pouvez contrôler le nombre de chiffres imprimés en utilisant cout avec la fonction setprecision.

#include 
#include 
using namespace std;

int main()
{
  double d = 123123.23234234;
  cout << setprecision(15) << d;
  system("pause");
  return 0;
}

0voto

Jay D Points 1670

Sprintf(); devrait vous aider facilement à imprimer un double dans une chaîne/tableau de caractères.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X