Замена printf ("% g", значение) на управление потоком - PullRequest
9 голосов
/ 31 мая 2019

Я хотел заменить реализацию:

float value = 3.14;
printf("%g", value);

(См. Как работает% g в printf для объяснения %g, если требуется).

Но я не нашел эквивалента в потоковых манипуляторах, только для фиксированных или научных, но не самый короткий из них (https://en.cppreference.com/w/cpp/io/manip/fixed). Существует ли это или существует "простой" способ реализовать это?

Некоторые примеры из связанного вопроса SO:

  • 544666.678 записывается как 544667, если используется %.6g,
  • То же число записывается как 5.4467E + 5.когда используется %.5g.

1 Ответ

6 голосов
/ 31 мая 2019

%g - поведение по умолчанию.Например:

#include <iomanip>
#include <iostream>

int main()
{
    std::cout << std::setprecision(6) << 544666.678 << "\n"
              << std::setprecision(5) << 544666.678 << "\n";
}

Выход:

544667
5.4467e+05

Поведение по умолчанию можно сохранить с помощью манипулятора std::defaultfloat после установки std::fixed или std::scientific.

Живая демоверсия

...