Форум программистов, компьютерный форум CyberForum.ru

Форматированный вывод - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 86, средняя оценка - 4.66
LVV
56 / 56 / 3
Регистрация: 15.02.2010
Сообщений: 239
24.02.2012, 09:04     Форматированный вывод #1
Например:

C++
1
2
double a=3.00;
    cout << a;
выводит 3
А мне нужно (таково условие вывода в задаче), чтобы выводило именно 3.00
То есть, чтобы выводило в обычной (не scientific) записи округлённое число именно до сотых. И чтобы обязательно выводило два десятичных знака после запятой, даже если это нули.
Как это сделать. Помогите, пожалуста. Экспериментировал c precision, ceil, floor... нужного результата добиться не смог. Само округление еще могу сделать, но вот вывести нули после точки не получается...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.02.2012, 09:04     Форматированный вывод
Посмотрите здесь:

C++ форматированный ввод\вывод
Форматированный вывод. Как??? C++
C++ Форматированный потоковый вывод
C++ форматированный вывод
Форматированный вывод в файл C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
24.02.2012, 09:15     Форматированный вывод #2
C++
1
#include <iomanip>
C++
1
std::cout << std::setprecision( 2 ) << std::fixed << a;
dimcoder
Полярный
 Аватар для dimcoder
449 / 422 / 66
Регистрация: 11.09.2011
Сообщений: 1,108
24.02.2012, 09:18     Форматированный вывод #3
Toshkarik, неа, не выведет. Надо к даблу кастовать:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <cstdlib>
#include <iostream>
#include <iomanip>
 
using namespace std;
 
int main(int argc, char *argv[])
{
    int x = 3;
    cout << setprecision(2) << fixed << double(x);
    system("PAUSE > NULL");
    return EXIT_SUCCESS;
}
http://liveworkspace.org/code/82e38f...82958bb9c7a9c1
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
24.02.2012, 09:25     Форматированный вывод #4
Зачем? Если в приведенном примере тип переменной double, при чем тут int?
dimcoder
Полярный
 Аватар для dimcoder
449 / 422 / 66
Регистрация: 11.09.2011
Сообщений: 1,108
24.02.2012, 09:26     Форматированный вывод #5
Toshkarik, извиняюсь, почему-то был уверен, что там int.
LVV
56 / 56 / 3
Регистрация: 15.02.2010
Сообщений: 239
24.02.2012, 09:32  [ТС]     Форматированный вывод #6
Ну, вот у меня в ручном режиме:
C++
1
2
3
4
5
double a=3.001;
    a*=100;
    a=floor(a+0.5);//округляем
    int b = (int)a;
        cout << b/100 << "." << b%100/10 << b%10;
только это же не число выводит, а набор цифр и знаков.
А надо бы число...
dimcoder
Полярный
 Аватар для dimcoder
449 / 422 / 66
Регистрация: 11.09.2011
Сообщений: 1,108
24.02.2012, 09:36     Форматированный вывод #7
LVV, вам же уже показали как делать.
LVV
56 / 56 / 3
Регистрация: 15.02.2010
Сообщений: 239
24.02.2012, 09:57  [ТС]     Форматированный вывод #8
Извините, dimcoder.
Помогите разобраться с Вашим кодом.
Если у меня в вычислениях получается, к примеру вещественное число 3.001, а я должен вывести на экран 3.00
При 3.007 должно вывести 3.01
Как сюда приспособить Ваш код с int x = 3; ?
dimcoder
Полярный
 Аватар для dimcoder
449 / 422 / 66
Регистрация: 11.09.2011
Сообщений: 1,108
24.02.2012, 10:02     Форматированный вывод #9
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <cstdlib>
#include <iostream>
#include <iomanip>
 
using namespace std;
 
int main(int argc, char *argv[])
{
    double x = 3.007;
    cout << setprecision(2) << fixed << double(x);
    system("PAUSE > NULL");
    return EXIT_SUCCESS;
}
http://liveworkspace.org/code/677512...5e1f5573662b7c

http://liveworkspace.org/code/4e76f1...618cd7990a316b
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
24.02.2012, 10:04     Форматированный вывод #10
Вы вообще второй пост видели?
LVV
56 / 56 / 3
Регистрация: 15.02.2010
Сообщений: 239
24.02.2012, 10:06  [ТС]     Форматированный вывод #11
Спасибо большое, dimcoder!

Странная вещь.
Я ведь тоже пробовал так:
C++
1
2
3
cout.precision(2);
    cout.fixed;
        cout <<  x;
и не получалось.

А так:
C++
1
cout <<setprecision(2) << fixed<<  x;
получилось.

Интересно, почему так?
renald
35 / 35 / 2
Регистрация: 11.02.2012
Сообщений: 105
24.02.2012, 10:21     Форматированный вывод #12
можно так, тогда

C++
1
2
3
cout.precision(2);
        cout.setf(ios::fixed);
cout << a;
dimcoder
Полярный
 Аватар для dimcoder
449 / 422 / 66
Регистрация: 11.09.2011
Сообщений: 1,108
24.02.2012, 12:42     Форматированный вывод #13
Цитата Сообщение от LVV Посмотреть сообщение
тоже пробовал так
По идее компилятор должен был выдать предупреждение о бессмысленности cout.fixed
Этот оператор просто возвращает значение типа fmtflags по моему.
http://liveworkspace.org/code/dbebb3...e0a17191efbd4c

http://liveworkspace.org/code/d4d930...9f741bba7357a0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.02.2012, 14:12     Форматированный вывод
Еще ссылки по теме:

Форматированный ввод-вывод C++
C++ Форматированный вывод матриц
Программа в С++. Форматированный вывод C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
renald
35 / 35 / 2
Регистрация: 11.02.2012
Сообщений: 105
24.02.2012, 14:12     Форматированный вывод #14
по моему, fixed - это и есть сам флаг, который включают вызовом setf

Цитата Сообщение от dimcoder Посмотреть сообщение
По идее компилятор должен был выдать предупреждение о бессмысленности cout.fixed
Да, если компилировать с -Wall - что рекомендовано, но кто-нибудь так делает
Yandex
Объявления
24.02.2012, 14:12     Форматированный вывод
Ответ Создать тему
Опции темы

Текущее время: 08:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru