2010-01-29 25 views
5

Necesito dar como resultado números en notación científica de modo que siempre haya un "0" antes del punto decimal.Formateo de la salida

p. Ej. Para el número x = 134,87546, lo que necesito para producir la salida 0.134875E03 NO 1.348755E02

¿Alguien sabe cómo hacer esto?

Gracias de antemano --Shiraz.

Respuesta

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

A continuación, simplemente imprima "0.", el número sin decimales, "E", luego el exponente.

+0

'log()' es el registro natural, en la biblioteca estándar de C. Quieres 'log10()'. – Amber

+0

Además, 'ceil (log10 (num))' devolverá '1' si la entrada es' 10', y '0.' concatenado con' 10' es '0.10', que cuando se multiplica por' 10^1' es '1.0' que no es igual a' 10'. Usted realmente quiere el piso, más 1. – Amber

+0

@Dav, Ah, gracias. No he usado stdmath en mucho tiempo, así que agregué el comentario que quise decir log10. Además, no consideré el caso donde los poderes de 10 son enteros para log10, y tiene razón. – strager

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

Puede investigar usando el Boost Format library que es una biblioteca de formato de salida general.

+1

Estoy bastante seguro de que los manipuladores fijos/científicos no pueden hacer que la salida siempre tenga un cero antes del punto decimal; están diseñados para la notación estándar que es un dígito (no un cero) antes del decimal. – Amber

+0

@Dav Ooops ... Pensé que así era como se comportaron los manipuladores. Lo eliminé de mi respuesta (y voté por su comentario;) – Yukiko