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/w/cpp/io/manip/setprecision