возможно ли использовать только sprintf (c ++) для форматирования отрицательного целого / двойного числа таким образом, чтобы между знаком и значением был пробел?
from this: -1234
to this: - 1234
Изменить: он будет идти в массив символов.
Я понимаю, что это не вопрос, но так как это помечено как C ++:
std::ostringstream out;
out << std::internal << std::setw(6) << -1234;
std::string result = out.str();
С sprintf
? Не напрямую, нет.
Вы должны будете реализовать эту логику самостоятельно (используя abs
/fabs
и второй sprintf
аргумент), или используйте соответствующий место действия для страны, которая использует этот макет рендеринга, и надеемся, что ваша реализация его соблюдает.
Вероятно, было бы намного проще с собственными потоками ввода / вывода в C ++, поэтому подумайте о переключении на них.
Попробуй это:
char large_evil_array[128];
double my_var = -12.34;
int my_int = -6589;
int chars_formatted =
snprintf(large_evil_array, sizeof(large_evil_array),
"%c %5.2f %c %d\n",
(char)((my_var < 0) ? '-' : ' '),
(double)((my_var < 0) ? (my_var * -1.0) : my_var),
(char)((my_int < 0) ? '-' : ' '),
(int)((my_int < 0) ? (-1 * my_int) : my_int));
Если вы используете потоки C ++, вы можете написать свой собственный модификатор форматирования.