Как добавить один пробел в pad для знака минус с ofstream, используя <<? - PullRequest
0 голосов
/ 08 февраля 2019

Я хочу << чисел с плавающей запятой в файл, используя ofstream, и включать один пробел, когда число положительное, например, как вы бы с </p>

printf("% .3f",number),

, чтобы убедиться, что они выровнены.Как вы форматируете << для включения единого пробела? </p>

1 Ответ

0 голосов
/ 08 февраля 2019

Кажется, в стандартной библиотеке его уже нет.Если вы не против многословия, просто сделайте это простым способом вручную:

if (std::signbit(number) == false) // to avoid traps related to +0 and -0
    std::cout << " ";
std::cout << number;

(Не забудьте #include <cmath> для signbit!)

Но этобольше "обходного пути".Вы также можете переопределить фасет num_put: (эта реализация основана на примере на cppreference)

// a num_put facet to add a padding space for positive numbers
class sign_padding :public std::num_put<char> {
public:
    // only for float and double
    iter_type do_put(iter_type s, std::ios_base& f,
                     char_type fill, double v) const
    {
        if (std::signbit(v) == false)
            *s++ = ' ';
        return std::num_put<char>::do_put(s, f, fill, v);
    }
};

И использовать его так:

// add the facet to std::cout
std::cout.imbue(std::locale(std::cout.getloc(), new sign_padding));
// now print what you want to print
std::cout << number;

См. живое демо .Таким образом, вы можете повторно использовать код.

...