2010-01-29 5 views
5

je dois les numéros de sortie en notation scientifique telle qu'il ya toujours un « 0 » avant la virgule.formatage de la sortie

par exemple. Pour le nombre x = 134.87546, j'ai besoin de produire la sortie 0.134875E03 PAS 1.348755E02

Est-ce que quelqu'un sait comment faire cela?

Merci à l'avance. --Shiraz

Répondre

0
int exponent = floor(log10(num)) + 1; 

Ensuite, il suffit d'imprimer "0", le nombre sans décimales, "E", puis l'exposant.

+0

'log()' est le logarithme naturel, dans la bibliothèque standard C. Vous voulez 'log10()'. – Amber

+0

De plus, 'ceil (log 10 (num))' retournera '1' si l'entrée est '10' et' '0.' concaténé avec 10' est' 0.10', qui, lorsqu'il est multiplié par '10^1' est '1.0' qui n'est pas égal à' 10'. Vous voulez vraiment le sol, plus 1. – Amber

+0

@Dav, Ah, merci. Je n'ai pas utilisé stdmath depuis longtemps, donc j'ai juste ajouté le commentaire que je voulais dire log10. En outre, je ne considère pas le cas où les puissances de 10 sont des nombres entiers pour log10, et vous avez raison. – strager

3
int exp = (int)log10(input)+1; 
double shifted = input/pow(10.0, exp); 
printf("%fE%d", shifted, exp); 
0

Vous pouvez étudier en utilisant la Boost Format library qui est une sortie générale bibliothèque formatage.

+1

Je suis à peu près certain que les manipulateurs fixes/scientifiques ne peuvent pas réellement faire en sorte que la sortie ait toujours un zéro avant la virgule décimale - ils sont conçus pour la notation standard qui est un seul chiffre (pas un zéro) avant la décimale. – Amber

+0

@Dav Ooops ... Je pensais que c'était ainsi que se comportaient les manipulateurs. Retiré de ma réponse (et voté votre commentaire;) – Yukiko

Questions connexes