C - Распечатка значений с плавающей запятой

У меня есть программа на C++, которая принимает значения и выводит такие значения:

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

У меня есть эквивалентная программа на C, которая принимает значения и распечатывает их так:

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

Но в то время как программа C++ выводит 0.30951, программа C выводит 0.309510. Другие примеры: C++: 0.0956439 C: 0.095644. Кажется, что он печатает те же результаты, если значение имеет длину 7 цифр, но если оно короче 7 цифр, в конце добавляется дополнительный 0. И если он длиннее 7 цифр, он округляется до 6 цифр. Я хотел бы, чтобы результаты C соответствовали программе C++. Любая помощь будет оценена по достоинству.

Спасибо.

Примечание: число является числом с плавающей запятой и число считывается из файла.


person FidelCashflo    schedule 19.03.2013    source источник
comment
Вы хотите изменить результаты C, чтобы они соответствовали C++, или наоборот?   -  person Bob Kaufman    schedule 20.03.2013
comment
Правильно, я хочу, чтобы результат C соответствовал C++.   -  person FidelCashflo    schedule 20.03.2013


Ответы (3)


Воспользуйтесь преимуществами спецификаторов длины и точности в C++ iostreams

std::cout.precision(4);
std::cout << std::setw(10) << number << "\n";
person Alex Chamberlain    schedule 19.03.2013
comment
Вы также можете установить точность непосредственно в этом потоке: std::cout ‹‹ 42.1 ‹‹ std::setprecision(4) ‹‹ std::endl; - person Neil McGill; 04.06.2020

Воспользуйтесь преимуществами спецификаторов длины и точности в операторах печати в формате C:

printf( "%6.4lf", number );

Печатает четыре десятичных знака в «ячейке» шириной шесть символов.

Вы можете использовать подстановочный знак для длины или точности, чтобы предоставить это значение во время выполнения:

int precision = 4;

printf( "%6.*lf", precision, number );
person Bob Kaufman    schedule 19.03.2013

printf("%g\n", number); 

Решит вашу проблему, %lf используется для double, %f используется для float, а %g используется для float, когда вы хотите отобразить все десятичные знаки и отрезать нули.

person Sava Vranešević    schedule 25.03.2013