std::setprecision
Определено в заголовке <iomanip> | ||
|---|---|---|
/*unspecified*/ setprecision( int n ); |
При использовании в выражении out << setprecision(n) или in >> setprecision(n) устанавливает параметр precision потока out или in в точное значение n.
Параметры
| n | - | новое значение точности |
Возвращаемое значение
Объект типа, не указанного в спецификации, такой, что
- если
outявляется объектом типаstd::basic_ostream<CharT, Traits>, выражениеout << setprecision(n)- имеет тип
std::basic_ostream<CharT, Traits>& - имеет значение
out - ведёт себя так, как если бы вызывало
f(out, n)
- имеет тип
- если
inявляется объектом типаstd::basic_istream<CharT, Traits>, выражениеin >> setprecision(n)- имеет тип
std::basic_istream<CharT, Traits>& - имеет значение
in - ведёт себя так, как если бы вызывало
f(in, n)
- имеет тип
где функция f определена следующим образом:
void f(std::ios_base& str, int n)
{
// set precision
str.precision(n);
}
Пример
#include <iomanip>
#include <iostream>
#include <limits>
#include <numbers>
int main()
{
constexpr long double pi{std::numbers::pi_v<long double>};
const auto default_precision{std::cout.precision()};
constexpr auto max_precision{std::numeric_limits<long double>::digits10 + 1};
std::cout << "default precision: " << default_precision << '\n'
<< "maximum precision: " << max_precision << "\n\n"
"precision: pi:\n";
for (int p{0}; p <= max_precision; ++p)
std::cout << std::setw(2) << p << " " << std::setprecision(p) << pi << '\n';
std::cout << std::setprecision(default_precision); // restore defaults
}
Вывод:
default precision: 6 maximum precision: 19 precision: pi: 0 3 1 3 2 3.1 3 3.14 4 3.142 5 3.1416 6 3.14159 7 3.141593 8 3.1415927 9 3.14159265 10 3.141592654 11 3.1415926536 12 3.14159265359 13 3.14159265359 14 3.1415926535898 15 3.14159265358979 16 3.141592653589793 17 3.1415926535897932 18 3.14159265358979324 19 3.141592653589793239
Отчёты об ошибках
Следующие отчёты об ошибках, изменяющих поведение, были ретроактивно применены к ранее опубликованным стандартам C++.
| DR | Применён к | Опубликованное поведение | Правильное поведение |
|---|---|---|---|
| LWG 183 | C++98 |
setprecision можно было использовать только с потокамитипа std::ostream или std::istream | можно использовать с любым символьным потоком |
См. также
|
(C++11)(C++11) | изменяет форматирование, используемое для ввода-вывода чисел с плавающей точкой (функция) |
| управляет точностью представления чисел с плавающей точкой (открытая функция-член std::ios_base) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/io/manip/setprecision