标准库中是否有一个函数可以像std::to_string
那样工作,但是有一个固定的长度?
std::cout << formatted_time_string << ":" << std::to_string(milliseconds) << " ... other stuff" << std::endl;
在上面的示例中,毫秒的范围是1到3位,因此输出格式不正确。
我知道有很多其他选项如何做到这一点(例如sprintf
,计算长度等),但内联选项会很好。
答案 0 :(得分:7)
您可以使用std::setw()
功能设置要在输出操作期间使用的字段。要保持正确的对齐,您可以使用std::setfill()
:
#include <iomanip> // for std::setw and std::setfill
std::cout << std::setfill('0') << std::setw(3) << formatted_time_string << ":" << std::to_string(milliseconds) << " ... other stuff" << std::endl;
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
如果milliseconds
是float
,您还可以使用std::setprecision
:
#include <iomanip> // for std::setprecision
std::cout << formatted_time_string << ":" << std::setprecision(3) << milliseconds << " ... other stuff" << std::endl;
// ^^^^^^^^^^^^^^^^^^^^^^^
答案 1 :(得分:6)
尝试使用setw()格式化输出。
std::out << setw(3) << formatted_time_string << ":" << std::to_string(milliseconds)
答案 2 :(得分:0)
为什么不以Boost方式?
#include<boost/format.hpp>
std::cout << boost::format("%s: %03d :%s\n")
% formatted_time_string % milliseconds % " ... other stuff";
答案 3 :(得分:0)
以上方法没关系,但对我来说不满意。
所以,我将这段代码用于我的项目。
wchar_t milliseconds_array[64] = { 0 };
_snwprintf_s(milliseconds_array, sizeof(milliseconds_array), L"%03d", milliseconds);
std::wstring milliseconds_str = milliseconds_array;