2010-01-29 6 views
5

Ho bisogno di emettere numeri in notazione scientifica in modo tale che ci sia sempre uno "0" prima del punto decimale.Uscita di formattazione

ad es. Per il numero x = 134.87546, devo produrre l'output 0.134875E03 NOT 1.348755E02

Qualcuno sa come fare?

Grazie in anticipo --Shiraz.

risposta

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

Quindi basta stampare "0", il numero senza decimali, "E", quindi l'esponente.

+0

'log()' è il registro naturale, nella libreria standard C. Vuoi 'log10()'. – Amber

+0

Inoltre, 'ceil (log10 (num))' restituirà '1' se l'input è' 10', e '0' concatenato con' 10' è '0.10', che quando moltiplicato per' 10^1' è '1.0' che non è uguale a' 10'. Vuoi davvero il pavimento, più 1. – Amber

+0

@Dav, Ah, grazie. Non ho usato lo stdmath da molto tempo quindi ho appena aggiunto al commento che intendevo log10. Inoltre, non ho considerato il caso in cui le potenze di 10 sono numeri interi per log10, e hai ragione. – strager

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

È possibile esaminare utilizzando Boost Format library che è una libreria di formattazione di output generale.

+1

Sono abbastanza sicuro che i manipolatori fissi/scientifici non possano effettivamente causare che l'output abbia sempre uno zero prima del punto decimale: sono progettati per la notazione standard che è una cifra singola (non uno zero) prima del decimale. – Amber

+0

@Dav Ooops ... Ho pensato che fosse così che si comportavano i manipolatori. Rimosso dalla mia risposta (e votato il tuo commento;) – Yukiko