使用sprintf格式化负整数/双精度

时间:2014-01-11 15:41:13

标签: c++ char string-formatting printf negative-number

是否可以仅使用sprintf(c ++)格式化负整数/ double,使得符号和值之间有空格?

from this: -1234

to this: - 1234

编辑:它将进入一个字符数组。

3 个答案:

答案 0 :(得分:0)

使用sprintf?的 Not directly, no

您需要自己实现此逻辑(使用abs / fabs和第二个sprintf参数),或者为国家/地区使用适当的区域设置谁使用此渲染布局,并希望您的实现遵守它。

使用C ++自己的I / O流可能会容易得多,所以请考虑切换到那些。

答案 1 :(得分:0)

试试这个:

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 ++流,则可以编写自己的格式修饰符。

答案 2 :(得分:0)

我意识到这不是问题,但因为它被标记为C ++:

std::ostringstream out;
out << std::internal << std::setw(6) << -1234;
std::string result = out.str();