2013-03-19 3 views
5

У меня есть программа 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++. Любая помощь будет оценена по достоинству.

Спасибо.

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

+1

Вы хотите изменить результаты С в соответствии с C++ или наоборот? –

+0

Правильно, я хочу, чтобы результат C соответствовал C++. – FidelCashflo

ответ

8

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

printf("%6.4lf", number); 

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

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

int precision = 4; 

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

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

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

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

Смежные вопросы