Поиск
 
 

Результаты :
 


Rechercher Расширенный поиск

Кто сейчас на форуме
Сейчас посетителей на форуме: 1, из них зарегистрированных: 0, скрытых: 0 и гостей: 1

Нет

[ Посмотреть весь список ]


Больше всего посетителей (7) здесь было Сб Июн 17, 2017 3:57 pm
Самые активные пользователи за неделю


Управление выводом чисел в C++

Предыдущая тема Следующая тема Перейти вниз

Управление выводом чисел в C++

Сообщение автор Ярослав в Ср Дек 21, 2016 12:07 pm

Вопрос:
При возведении в квадрат 1000 число 1 000 000 печатается как 1e+06. Можно ли сделать, чтобы оно выглядело как 1000000, и если да, то как?


Короткий ответ:
Да. Сделайте так:
Код:
int number = 1000 * 1000;
cout << fixed << number;


Длинный ответ:
Язык C++
cout можно настроить, используя манипуляторы или функции cout. Поговорим о первых.

Манипуляторы — это специальные объекты, которые можно закидывать в потоковую перменную, такую как cout. Они меняют будущее поведение cout.

Код:
int number = 1000 * 1000;
cout << fixed << setw (11) << setprecision (6) << setfill ('0') << number;
Печатает:
Код:
1000000.000000

Здесь мы кладём в cout сразу 4 манипулятора (fixed, setw, setprecision, setfill), прежде чем напечатать число. Разберём каждый:

• Манипулятор fixed говорит: отныне и впредь числа с плавающей точкой печатать в привычном человеку формате «Целая часть; десятичная точка; дробная часть», например: 10000.12. При этом он будет вести себя умно, и дробную часть не печатать, если её нет.

• Манипулятор setw (от set width — задать ширину) устанавливает, сколько знаков займёт следующее напечатанное число или значение. В нашем примере число займёт не менее 11 символов, недостающие будут дополнены пробелами. При этом пробелы добавляются слева, так что число займёт крайние правые позиции из 11 отведённых ему символов.

• Манипулятор setprecision указывает, сколько знаков после десятичной запятой у float мы хотим гарантированно видеть. Например, если бы мы печатали число денег, логично было бы запросить не менее 2 знаков после запятой (для отображения копеек). В нашем примере 6 знаков после запятой будут напечатаны принудительно.

• Манипулятор setfill устанавливает символ для заполнения пустого пространства и работает в комбинации с setw. Обычно setw заполняет неиспользованные символы пробелами; но это можно поменять с помощью setfill. В примере мы говорим компьютеру: заполняй пустое пространство не пробелами, а нулями.

Вообще полное имя манипуляторов: std::fixed, std::setw, std::setprecision и так далее, но благодаря строчке
Код:
using namespace std;
мы префикс std:: не пишем.

Есть и другие манипуляторы, но эти самые основные, если вы хотите управлять выводом чисел на экран.

См. также: http://www.cplusplus.com/reference/library/manipulators/
avatar
Ярослав
Admin

Posts : 346
Join date : 2016-12-21
Location : Москва

Посмотреть профиль http://itstep.forum2x2.ru

Вернуться к началу Перейти вниз

Re: Управление выводом чисел в C++

Сообщение автор Павел в Чт Дек 22, 2016 2:22 am

При использовании первого варианта
Ярослав пишет:int number = 1000 * 1000;
cout << fixed << number;
автоматом при запуске выдает нули перед вводом.

Но, результат нужный.

Второй вариант испытаю позже, уже в студии.

Спасибо за ответ! Ура!

Павел

Posts : 8
Join date : 2016-12-22
Age : 25

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Управление выводом чисел в C++

Сообщение автор Ярослав в Чт Дек 22, 2016 8:51 pm

Павел пишет:При использовании первого варианта автоматом при запуске выдает нули перед вводом.
Это странно, не должно такого происходить. Надо смотреть код: что и как написано.
avatar
Ярослав
Admin

Posts : 346
Join date : 2016-12-21
Location : Москва

Посмотреть профиль http://itstep.forum2x2.ru

Вернуться к началу Перейти вниз

Re: Управление выводом чисел в C++

Сообщение автор Павел в Пт Дек 23, 2016 12:05 am

Ярослав пишет:
Это странно, не должно такого происходить. Надо смотреть код: что и как написано.
Проблему решил удалив number из кода
Код:
cout << fixed << number;
Поскольку изначально, в ДЗ,  number у нас неизвестен, он выдает нули.
Вот исправленный код, все работает как надо:
Код:
cout << fixed;


Во втором варианте проблема, манипуляторы не определяются.  
Код:
using namespace std;
использовал.

P:S: Откройте возможность писать в лс, чтоб не кидать код на форум)

Павел

Posts : 8
Join date : 2016-12-22
Age : 25

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Управление выводом чисел в C++

Сообщение автор Ярослав в Пт Дек 23, 2016 11:28 am

setfill, setprecision, setfill требуют дополнительно подключения библиотеки манипуляторов <iomanip>:

Код:
#include <iostream>
#include <iomanip>

http://www.cplusplus.com/reference/iomanip/setw/

Учусь Эти знания могут ещё кому-нибудь пригодиться
avatar
Ярослав
Admin

Posts : 346
Join date : 2016-12-21
Location : Москва

Посмотреть профиль http://itstep.forum2x2.ru

Вернуться к началу Перейти вниз

Re: Управление выводом чисел в C++

Сообщение автор Павел в Пт Дек 23, 2016 11:42 am

Спасибо, попробую=)
Можно ли сразу включать в код все нужные библиотеки? Или их нужно подключать только по мере необходимости?

Павел

Posts : 8
Join date : 2016-12-22
Age : 25

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Управление выводом чисел в C++

Сообщение автор Ярослав в Пт Дек 23, 2016 3:52 pm

Павел пишет:Можно ли сразу включать в код все нужные  библиотеки? Или их нужно подключать только по мере необходимости?

Обычно подключают только нужные, тому несколько причин:

• Библиотек реально много, это мы пока встретились с 1-2. Всех не наподключаешься.
• Каждая подключенная библиотека немного замедляет компиляцию. Компилятору приходится обрабатывать текст подключенного файла. Это особенно актуально в крупных проектах — от 10 исходных файлов.
• Неиспользуемые подключенные файлы в принципе могут увеличивать размер программы (на жёстком диске и в памяти). В зависимости от вашего компилятора, могут и не увеличивать.
avatar
Ярослав
Admin

Posts : 346
Join date : 2016-12-21
Location : Москва

Посмотреть профиль http://itstep.forum2x2.ru

Вернуться к началу Перейти вниз

Re: Управление выводом чисел в C++

Сообщение автор Спонсируемый контент


Спонсируемый контент


Вернуться к началу Перейти вниз

Предыдущая тема Следующая тема Вернуться к началу


 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения