2013-03-19 17 views
5

Mam program C++, które odbywają się w wartościach i drukuje wartości tak:C - Drukowanie z pływaka wartości

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

mam równoważny program C, które odbywają się w wartościach i drukuje tak:

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

Ale podczas gdy program C++ drukuje, 0.30951 program C wypisuje 0.309510. Więcej przykładów: C++: 0.0956439 C: 0.095644. Wydaje się, że drukuje takie same wyniki, o ile wartość ma 7 cyfr, ale jeśli jest krótsza niż 7 cyfr, dodaje na końcu dodatkowe 0. A jeśli ma więcej niż 7 cyfr, zaokrągla do 6 cyfr. Chciałbym, aby wyniki C pasowały do ​​programu C++. Każda pomoc będzie doceniona.

Dzięki.

Uwaga: liczba to liczba zmiennoprzecinkowa, a liczba jest odczytywana z pliku.

+1

Czy chcesz zmienić wyniki C, aby odpowiadały C++ lub odwrotnie? –

+0

Prawidłowo, chcę, aby wynik C był zgodny z C++. – FidelCashflo

Odpowiedz

8

skorzystać z długości i precyzyjnych specyfikatorami w C sformatowanych wypowiedzi drukowania:

printf("%6.4lf", number); 

Drukuje czterech miejsc po przecinku w „komórka” szerokiej sześć znaków.

Można użyć symbolu wieloznacznego dla obu długości i precyzją, aby zapewnić, że wartość w czasie wykonywania:

int precision = 4; 

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

skorzystać długości i precyzyjnych specyfikatorami w C++ iostream s

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

Rozwiąże twój problem,% lf jest używany jako double,% f jest używany do float, a% g służy do float, gdy chcesz wyświetlić wszystkie miejsca dziesiętne i odciąć zera.