是否有可能仅使用sprintf(C++)格式化负整数/双数据的方式,使符号和值之间有空格?使用sprintf格式负整数/双
from this: -1234
to this: - 1234
编辑:它将进入一个字符数组。
是否有可能仅使用sprintf(C++)格式化负整数/双数据的方式,使符号和值之间有空格?使用sprintf格式负整数/双
from this: -1234
to this: - 1234
编辑:它将进入一个字符数组。
我意识到,这不是问题,但由于这是标记为C++:
std::ostringstream out;
out << std::internal << std::setw(6) << -1234;
std::string result = out.str();
它做得非常好!谢谢! – bevolasko
With sprintf
? Not directly, no。
您需要自己实现这个逻辑(使用abs
/fabs
和第二sprintf
参数),或使用适当的区域设置为谁使用这种渲染布局,并希望您的实现通过其遵守的国家。
使用C++自己的I/O流可能会更容易,所以请考虑切换到那些。
试试这个:
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++流,你可以写你自己的格式修改。
纯粹出于好奇,为什么你要这个格式?有些国家是否在数字前用空格格式化负数? – Bojangles
这个文档很清楚你可以做什么,不能做什么... http://www.cplusplus.com/reference/cstdio/printf/ –
@Bojangles:我已经看到了一些报告,带符号的正数和负数。 –