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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 115, средняя оценка - 4.82
g-h
67 / 67 / 1
Регистрация: 03.06.2012
Сообщений: 176
#1

setprecision() и setiosflags() - C++

11.06.2012, 19:29. Просмотров 17120. Ответов 9
Метки нет (Все метки)

Почему чтобы напечатать число с двумя цифрами после запятой нужно использовать обе эти функции?
C++
1
cout << setprecision(2) << setiosflags(ios::fixed | ios::showpoint) << 10.0 / 3;
Ведь setprecision(2) и так уже показывает что результат будет с двумя цифрами после десятичной точки.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
David Sylva
1285 / 947 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
11.06.2012, 22:31     setprecision() и setiosflags() #2
Можно и без них. Только чтобы напечатать с двумя цифрами после запятой надо писать
setprecision(3)
easybudda
Эксперт С++
9456 / 5469 / 927
Регистрация: 25.07.2009
Сообщений: 10,495
11.06.2012, 22:48     setprecision() и setiosflags() #3
Цитата Сообщение от g-h Посмотреть сообщение
Почему чтобы напечатать число с двумя цифрами после запятой нужно использовать обе эти функции?
Это не функции, это флаги. Один указывает, сколько цифр должно быть после запятой, второй - в каком виде число выводить.

Цитата Сообщение от David Sylva Посмотреть сообщение
Только чтобы напечатать с двумя цифрами после запятой надо писать
setprecision(3)
Да ну?!

C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include <iomanip>
 
int main() {
    double pi = 3.1415926536;
    
    std::cout << std::setprecision(2) << std::fixed << pi << std::endl;
    std::cout << std::setprecision(2) << std::scientific << pi << std::endl;
    
    return 0;
}
http://codepad.org/3KHLvMYK
MrCold
852 / 750 / 71
Регистрация: 11.01.2012
Сообщений: 1,942
12.06.2012, 00:30     setprecision() и setiosflags() #4
David Sylva, вы же fixed не используете
пример здесь http://www.cplusplus.com/reference/i.../setprecision/
David Sylva
1285 / 947 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
12.06.2012, 00:37     setprecision() и setiosflags() #5
Цитата Сообщение от easybudda Посмотреть сообщение
Да ну?!
setprecision() и setiosflags()
grizlik78
Эксперт С++
1903 / 1435 / 109
Регистрация: 29.05.2011
Сообщений: 2,989
12.06.2012, 01:33     setprecision() и setiosflags() #6
David Sylva, пост #4 это ответ на #5.
Попробуй вывести 35.14283 — сколько цифр после точки получится?
ArtemZ94
0 / 0 / 0
Регистрация: 08.06.2014
Сообщений: 11
16.06.2014, 07:58     setprecision() и setiosflags() #7
Ну на вопрос же так и не ответили. (как я понял) setprecision(2) выводит число 1384 как 13.84. Для чего присутствие флагов, которые показывают, что в числе будет 2 знака после точки(запятой), когда уже setprecision всё указал. Если писать код без этих флагов что изменится? Может кто-нибудь растолковать их значение? Только не надо кидать ссылки на ресурсы с буржуйским языком.
grizlik78
Эксперт С++
1903 / 1435 / 109
Регистрация: 29.05.2011
Сообщений: 2,989
16.06.2014, 09:52     setprecision() и setiosflags() #8
Цитата Сообщение от ArtemZ94 Посмотреть сообщение
(как я понял) setprecision(2) выводит число 1384 как 13.84.
Ну а чего стоит взять да и проверить? Если флаги fixed или scientific не использовались, то число 1384 будет выведено как 1.4e+03, потому что setprecision(2) в этом случае задаёт количество значащих десятичных цифр в числе. Если использовать fixed или scientific, то setprecision(2) задаёт количество цифр после точки, то есть вывод будет 1384.00 и 1.38e+03 соответственно. А сами эти флаги выбирают формат представления числа — обычное представление десятичной дроби или научное, с мантиссой и экспонентой...
ArtemZ94
0 / 0 / 0
Регистрация: 08.06.2014
Сообщений: 11
16.06.2014, 10:19     setprecision() и setiosflags() #9
Цитата Сообщение от grizlik78 Посмотреть сообщение
Ну а чего стоит взять да и проверить? Если флаги fixed или scientific не использовались, то число 1384 будет выведено как 1.4e+03, потому что setprecision(2) в этом случае задаёт количество значащих десятичных цифр в числе. Если использовать fixed или scientific, то setprecision(2) задаёт количество цифр после точки, то есть вывод будет 1384.00 и 1.38e+03 соответственно. А сами эти флаги выбирают формат представления числа — обычное представление десятичной дроби или научное, с мантиссой и экспонентой...
А showpoint для чего? Без него и так выводит 1384.00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.06.2014, 10:28     setprecision() и setiosflags()
Еще ссылки по теме:

C++ Унарная операция setprecision
C++ SETprecision. В чем ошибка?
C++ Использование манипулятора setprecision

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

Или воспользуйтесь поиском по форуму:
grizlik78
Эксперт С++
1903 / 1435 / 109
Регистрация: 29.05.2011
Сообщений: 2,989
16.06.2014, 10:28     setprecision() и setiosflags() #10
Это для случая, когда не используются флаги fixed или scientific. Если задать setprecision(5), то можно получить 1384.0 или 1384, в зависимости от использования флага showpoint.
Yandex
Объявления
16.06.2014, 10:28     setprecision() и setiosflags()
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru