2013-03-19 12 views
5

Ho un programma C++ che prende in valori e stampa i valori in questo modo:C - La stampa di float valori

getline(in,number); 
cout << setw(10) << number << endl; 

Ho un programma di C equivalente che prende in valori e stampa in questo modo:

fscanf(rhs, "%e", &number); 
printf("%lf\n", number); 

Ma mentre il programma C++ stampa, 0.30951 il programma C stampa 0.309510. Altri esempi: C++: 0.0956439 C: 0.095644. Sembra stampare gli stessi risultati fino a quando il valore è lungo 7 cifre, ma se è più corto delle 7 cifre, aggiunge uno 0 in più alla fine. E se è più lungo di 7 cifre, arrotonda fino a 6 cifre. Vorrei che i risultati C corrispondessero al programma C++. Qualsiasi aiuto sarebbe apprezzato.

Grazie.

Nota: il numero è un float e il numero viene letto da un file.

+1

Si desidera modificare i risultati C in modo che corrispondano al C++ o viceversa? –

+0

Corretto, voglio che il risultato C corrisponda al C++. – FidelCashflo

risposta

8

approfittare della lunghezza e precisione prescrittori a dichiarazioni di stampa C formattati:

printf("%6.4lf", number); 

Stampe quarto decimale in una "cella" di larghezza di sei caratteri.

È possibile utilizzare un carattere jolly sia per la lunghezza o la precisione di fornire quel valore in fase di esecuzione:

int precision = 4; 

printf("%6.*lf", precision, number); 
8

approfittare della lunghezza e precisione prescrittori in C++ iostream s

std::cout.precision(4); 
std::cout << std::setw(10) << number << "\n"; 
4
printf("%g\n", number); 

Risolverà il tuo problema,% lf è usato per il doppio,% f è usato per float, e% g è usato per float quando vuoi visualizzare tutte le cifre decimali e tagliare gli zeri.

Problemi correlati