如何使用 << 添加单个 space 来填充带有 ofstream 的减号?
How to add a single space to pad for a minus sign with ofstream using <<?
我想使用 ofstream << 将浮点数添加到文件中,并在数字为正数时包含一个 space,例如使用
的方式
printf("% .3f",number),
确保它们对齐。如何格式化 << 以包含单个符号 space?
标准库中似乎没有。
如果您不介意冗长,直接手动操作即可:
if (std::signbit(number) == false) // to avoid traps related to +0 and -0
std::cout << " ";
std::cout << number;
(别忘了 #include <cmath>
因为 signbit
!)
但这更像是 "workaround"。
您还可以重新实现 num_put
方面:
(此实现的灵感来自 the example on 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;
参见live demo。
这样,您就可以重复使用代码。
我想使用 ofstream << 将浮点数添加到文件中,并在数字为正数时包含一个 space,例如使用
的方式printf("% .3f",number),
确保它们对齐。如何格式化 << 以包含单个符号 space?
标准库中似乎没有。 如果您不介意冗长,直接手动操作即可:
if (std::signbit(number) == false) // to avoid traps related to +0 and -0
std::cout << " ";
std::cout << number;
(别忘了 #include <cmath>
因为 signbit
!)
但这更像是 "workaround"。
您还可以重新实现 num_put
方面:
(此实现的灵感来自 the example on 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;
参见live demo。 这样,您就可以重复使用代码。