Spec-Zone.ru › C++

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
применима к любому
потоку символов

См. также

fixedscientifichexfloatdefaultfloat
(C++11)(C++11)
изменяет формат, используемый для ввода-вывода с плавающей запятой
(функция)
precision
управляет десятичной точностью операций с плавающей запятой
(публичный член-функция 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API