C++输出格式控制

这篇博客介绍了C++中如何使用`cout`进行输出格式控制,特别是针对浮点数的有效数字位数设定。通过`cout.precision()`和`cout.setf(ios::fixed)`等方法,可以精确控制小数点后的位数,并调整输出形式。

标准输出流(cout)

C++ 标准库提供了一组丰富的输入/输出功能,我们将在后续的章节进行介绍。本章将讨论 C++ 编程中最基本和最常见的 I/O 操作。
C++ 的 I/O 发生在流中,流是字节序列。如果字节流是从设备(如键盘、磁盘驱动器、网络连接等)流向内存,这叫做输入操作。如果字节流是从内存流向设备(如显示屏、打印机、磁盘驱动器、网络连接等),这叫做输出操作。

头文件函数及描述
<iostream>该文件定义了 cin、cout、cerr 和 clog 对象,分别对应于标准输入流、标准输出流、非缓冲标准错误流和缓冲标准错误流。
<iomanip>该文件通过所谓的参数化的流操纵器(比如 setw 和 setprecision),来声明对执行标准化 I/O 有用的服务
<fstream>该文件为用户控制的文件处理声明服务。

如何利用这些文件控制输出

#include <cstdlib>
#include <iostream>
#include <iomanip>
using namespace std;

int main(){
    double num = 1234.56789; 
    cout << "1234.56789" << endl;
    cout << num << endl;
    cout << "after setting :" << endl;
	
    return 0;
}

运行截图:

在这里插入图片描述

结论: cout 会对浮点数自动的四舍五入保留两位有效小数

  • 要想保留后面的小数, 我们需要调用 <iomanip> 中的 setiosflags(ios::fixed) 固定的浮点显示
int main(){
    double num = 1234.56789; 
    cout << "1234.56789" << endl;
    cout << num << endl;
    cout << "after setting :" << endl;
    cout << setiosflags(ios::fixed)<<num << endl;
    return 0;
}

运行截图:
在这里插入图片描述
与之相当的是 cout.setf()

  • 具体用法:
    cout.setf(ios::fixed);
    cout << num << endl;

运行截图:
在这里插入图片描述

利用cout.precision()设置有效数字位数;

int main(){
    double num = 1234.56789; 
    cout << "1234.56789" << endl;
    cout << num << endl;
    cout << "after setting :" << endl;
    cout.precision(3);
    cout << num << endl;
    return 0;
}

运行截图:
在这里插入图片描述
可以发现当有效数位小于数字时改用科学计数法

cout.precision(7);//输出 7 位有效数字
cout << num << endl;

运行截图:
在这里插入图片描述
可以发现单独的使用cout.precision() 可以控制输出的有效数字;

  • cout.precision() 与 setprecision() 效果相当;
    cout << setprecision(3)<<num << endl;

运行截图:
在这里插入图片描述

精确到小数点后某位.

  • 我们可以利用 cout.setf(ios::fixed) 和 cout.precision() 来做到控制输出.
#include <iostream>
#include <iomanip>
using namespace std;

int main(){
    double num = 1234.56789; 
    cout << "1234.56789" << endl;
    cout << num << endl;
    cout << "after setting :" << endl;
    
    cout.precision(3);
    cout.setf(ios::fixed);
    cout << num << endl;
    return 0;
}

运行截图:
在这里插入图片描述

  • 使用完毕后想关闭设置,可以调用cout.unsetf()
  • 关闭有效数位可以将有效数位设置为 -1 ;
    cout.unsetf(ios::fixed);
    cout.precision(-1);
    cout << "after unsetf :" << endl;
    cout << num << endl;

运行截图 :
在这里插入图片描述

当然关于cout的输出控制还有许多,这里不一 一举例,大致用法相同,其中
cout.setf 跟 setiosflags 功能一样,cout.precision 跟 setprecision 功能一样,cout.unsetf 跟 resetiosflags 功能一致;

  • cout.setf常见的标志
cout.setf(ios::fixed)功能
boolalpha可以使用单词”true”和”false”进行输入/输出的布尔值.
oct用八进制格式显示数值.
dec用十进制格式显示数值.
hex用十六进制格式显示数值.
left输出调整为左对齐.
right输出调整为右对齐.
scientific用科学记数法显示浮点数.
fixed用正常的记数方法显示浮点数(与科学计数法相对应).
showbase输出时显示所有数值的基数.
showpoint显示小数点和额外的零,即使不需要.
showpos在非负数值前面显示”+(正号)”.
skipws当从一个流进行读取时,跳过空白字符(spaces, tabs, newlines).
unitbuf在每次插入以后,清空缓冲区.
internal将填充字符回到符号和数值之间.
uppercase以大写的形式显示科学记数法中的”e”和十六进制格式的”x”.
  • setiosflags 常见用法
setiosflags功能
setiosflags(ios::fixed)固定的浮点显示
setiosflags(ios::scientific)指数表示
setiosflags(ios::left)左对齐
setiosflags(ios::right)右对齐
setiosflags(ios::skipws)忽略前导空白
setiosflags(ios::uppercase)16进制数大写输出
setiosflags(ios::lowercase)16进制小写输出
setiosflags(ios::showpoint)强制显示小数点
setiosflags(ios::showpos)强制显示符号

求点赞, 求关注, 让我们一起进步, CSDN的伙伴们加油, 奥力给 !

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值