В данном конкретном случае я не думаю, что это возможно, по крайней мере, без большой работы.В C ++ (в отличие от C) аргумент precision
игнорируется при выводе целого числа, поэтому вы не можете получить желаемый эффект, используя только манипуляторы (и boost::format
также не поддерживает его).Вам, вероятно, придется отформатировать строку, затем поставить префикс или вставить '0'
вручную.
В прошлом у меня был класс GB_Format
(это были дни до пространства имен), что-то вродеboost::format
, но который поддерживает все спецификации форматирования Posix;чтобы заставить "%.<i>n</i>d"
работать, мне пришлось самому выполнять интегральные преобразования, а не использовать базовые преобразования потоков.Примерно так:
std::string
fmtInt( int value, int width, int precision )
{
unsigned work = (value < 0 ? -value : value);
std::string result;
while ( work != 0 || result.size() < precision ) {
result += "0123456789"[ work % 10 ];
work /= 10;
}
result += (value < 0 ? '-' : '+');
while ( result.size() < width ) {
result += ' ';
}
return std::string( result.rbegin(), result.rend() );
}