2009-10-18 10 views
1

Le code suivant affiche les nombres à virgule flottante en notation scientifique:Comment afficher des nombres à virgule flottante avec une mantisse définie sur zéro en C++?

float foo = 1.0; 
::cout::setf(::std::ios::scientific); 
::std::cout << foo; 

Il produit cette sortie:

1.000000e-000 

Ce que je voudrais faire est l'affichage des nombres à virgule flottante dans une notation spécifique ressemble à la notation scientifique mais avec une mantisse mise à zéro. Avec le même nombre à virgule flottante comme ci-dessus, il produirait:

0.100000e+001 

En C, je crois que ce serait écrit ainsi:

printf("%.6E", foo); 

Mise à jour: En fait, je ne sais pas comment le faire en C aussi bien. Update2: L'exemple utilisant le formatage iostream était incorrect. Je l'ai modifié selon le commentaire de Michael Burr.

+0

printf ("%. 0f", foo); – aviraldg

+0

Merci, mais je veux vraiment savoir comment faire cela sans utiliser printf – Boule

+7

Vous avez tous les deux tort. * Ni *% .6E ni% .0f ne permettent à printf d'afficher un nombre dans le format désiré. –

Répondre

2

Si vous voulez faire cela avec des ostreams, je pense que vous devrez utiliser des "facettes". Cette partie peu connue de C++ vous permet de contrôler le formatage comme bon vous semble.

Voici une description de num_put, qui est quels formats les chiffres de la façon dont vous ne l'aimez pas: http://www.cplusplus.com/reference/std/locale/num_put/

Vous aurez besoin de « imprégner » votre ostream (littéralement ostr.imbue()) avec un lieu contenant la facette vous allez créer des numéros de format comme vous le souhaitez.

Je suggère de commencer par écrire une fonction pour convertir un nombre en chaîne en utilisant la mise en forme que vous voulez. Une fois que vous avez cela, si vous souhaitez faire tout le monde et faire les choses facettes, vous pouvez (ou peut-être vous décider que c'est trop complexe, ce que la plupart des gens finissent par faire).

Questions connexes