C++ 标准库 <iomanip>

 

  • <iomanip> 是 C++ 标准库中的一个头文件,它提供了对输入/输出流的格式化操作。
  • iomanip 库中的函数允许开发者控制输出格式,如设置小数点后的位数、设置宽度、对齐方式等。
  • iomanip 是 Input/Output Manipulators 的缩写,它提供了一组操作符,用于控制 C++ 标准库中的输入/输出流的格式。

iomanip 库中的函数通常与 << 和 >> 操作符一起使用,以实现对输出流的控制。以下是一些常用的 iomanip 函数:

  • setw(int)
  • setprecision(int)
  • fixed
  • scientific
  • setiosflags(ios_base::fmtflags)
  • resetiosflags(ios_base::fmtflags)
  • setfill(char)
1. 设置宽度

使用 setw 可以设置输出的宽度。如果输出内容的字符数少于设置的宽度,剩余部分将用空格填充。


2. 设置精度

作用:控制输出流显示浮点数的数字个数,setprecision(n)就是输出的n个数,会有四舍五入。

特别提示:

如果再在这些语句后面加三条语句:

第一条输出:1,不是浮点型。

第二条为:1.008,承接setprecision(8)的这条规则语句

第三条也为:1,按整型输出

可见,小数部分末尾为0时,是输不出来的!要想输出来,就得用showpoint了。

语法:在输出语句前声明:

    cout.setf(ios::showpoint);就行了!

如果想要保留几位小数,那setprecision就得与fixed合作了!!

语法:在输出语句前声明:

cout.setf(ios::fixed);

语句也可以写成:cout<<fixed<<setprecision(2)<<s<<endl;

就算后面的语句没有写<<fixed,同样会按有<<fixed处理。

比如有语句:

cout<<fixed<<setprecision(2)<<s<<endl;
cout<<setprecision(7)<<s<<endl; //A
cout<<setprecision(8)<<s<<endl;  //B

AB语句均会按保留7个、8个小数处理,不会再按有7或8个浮点数处理。

如果下面有语句C: cout<<1.008<<endl; 也会保留8个小数。如下:

setprecision、showpoint与fixed混合使用

  • std::fixed:这个操作符设置浮点数的输出格式为固定的小数点表示法,而不是科学计数法。然而,它本身并不控制小数点后的位数。如果你想要控制小数点后的位数,你需要与 std::setprecision 结合使用。

  • std::showpoint:这个操作符确保在输出浮点数时,即使末尾是0也会显示小数点。默认情况下,如果浮点数的小数部分全部为0,则不会显示小数点。

   double s=20.7843909

1)有语句

cout<<setprecision(2)<<s<<endl;//输出21    
cout<<fixed<<s<<endl;//输出20.78

2)有语句:

cout<<setprecision(2)<<s<<endl;//输出21    
cout<<showpoint<<s<<endl;//输出21.(有个点)

3)有语句:

cout<<setprecision(2)<<s<<endl;//输出21
cout<<fixed<<s<<endl; //输出20.78
cout<<showpoint<<s<<endl;//输出20.78

4)有语句:

cout<<setprecision(2)<<s<<endl;//输出21
cout<<showpoint<<s<<endl;//21.(有个点)
cout<<fixed<<s<<endl;//20.78
3. 固定小数点和科学计数法

fixed 和 scientific 可以控制浮点数的输出格式。


4. 设置填充字符

使用 setfill 可以设置填充字符,通常与 setw 一起使用。默认情况下,如果输出宽度大于要输出的数据所需的宽度,并且没有指定填充字符,则大多数实现会使用空格作为填充字符。但是,通过使用 std::setfill,你可以改变这个默认行为,使用任何你想要的字符作为填充。


5. 设置和重置格式标志

setiosflags 和 resetiosflags 可以设置或重置流的格式标志。

std::setiosflags 用于设置I/O流的一个或多个格式标志。它接受一个或多个std::ios_base::fmtflags类型的参数,这些参数指定了要设置的标志。一旦设置了这些标志,它们将影响后续的I/O操作,直到被std::resetiosflags或类似的操纵符重置。

std::setiosflags相反,std::resetiosflags用于清除(重置)I/O流的一个或多个格式标志。它同样接受std::ios_base::fmtflags类型的参数,但这次是用来指定哪些标志应该被清除。

例1:

例2:

注意:虽然在这个例子中std::setiosflags与std::ios::fixed和std::ios::showpoint一起使用,但std::setiosflags实际上可以接受任何std::ios_base::fmtflags的组合,并通过(|)操作符组合它们

std::resetiosflags只会清除你明确指定的那些标志。在这个例子中,我们清除了std::ios::fixed标志,但保留了std::ios::showpoint标志

  • 30
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hl026

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值