重载流运算符时如何为浮点数添加%符号并保留格式控制
问题:重载流运算符实现带百分号的格式化表格输出
我正在重载流运算符,希望生成如下格式的分栏数值表格:
┌───────────────┬──────────────────────┬─────────────┬──────────────┐ │ X │ Y. │ Z. │ value │ ├───────────────┼──────────────────────┼─────────────┼──────────────┤
随后我用了这段代码输出数值:
<< std::setw(13) << std::noshowpoint << value << "%" << "|" << endl;
我希望当value为5时,输出结果为5%。尝试过用to_string方法,但它会覆盖std::noshowpoint的格式控制,请问该怎么实现这个需求?
解决方法
- 别用
to_string,直接通过流的格式控制处理就行。std::noshowpoint本身就会让浮点数(比如5.0)不显示小数点,直接输出5,之后拼接%就能得到5%;如果value是整数类型,本来就不会有小数点,直接加%即可。 - 要是想统一整数和浮点数的输出格式,确保不管是
5还是5.123都只输出整数部分,再加std::fixed和std::setprecision(0)就行,修改后的代码如下:
<< std::setw(13) << std::noshowpoint << std::fixed << std::setprecision(0) << value << "%" << "|" << std::endl;
- 注意:
std::setw仅对紧接着的下一个输出项生效,位置别放错;std::fixed和std::setprecision是全局生效的格式符,如果后续还有其他输出需要不同格式,记得手动恢复之前的设置。
内容的提问来源于stack exchange,提问作者Korneliusz93
相关产品推荐
相关产品推荐

