C++中关于输出精度与取整函数的问题

使用这些格式需要声明包含<iomanip>

1.使用控制符控制输出格式

控制符作用
dec设置整数的基数为10
hex设置整数的基数为16
oct设置 整数的基数为8
setbase(n)设置整数的基数为n(n只能是16,10,8之一)
setfill(c)设置填充字符c,c可以是字符常量或字符变量
setprecision(n)setprecision(n)设置实数的精确度为n位。
在以十进制小数形式输出时,n代表有效数字位数
在以fixed(固定小数位数)形式和scientific(指数)形式输出时,n为小数位数
setw(n)设置字段宽度为n位。
setiosflags(ios::fixed)设置浮点数以固定的小数位数显示。
setiosflags(ios::scientific)设置浮点数以科学计数法(即指数形式)显示。
setiosflags(ios::left)输出数据左对齐。
setiosflags(ios::right)输出数据右对齐。
setiosflags(ios::shipws)忽略前导的空格。
setiosflags(ios::uppercase)在以科学计数法输出E和十六进制输出字母X时,以大写表示。
setiosflags(ios::showpos)输出正数时,给出“+”号。
resetiosflags终止已设置的输出格式状态,在括号中应指定内容。

2.用流对象的 成员控制输出格式

流成员函数与之作用相同的控制符作用
precision(n)setprecision(n)设置实数的精度为n位。
width(n)setw(n)设置字段宽度为n位。
fill(c)setfill(c)设置填充字符c。
setf( )setiosflags( )设置输出格式状态,括号中应给出格式状态,内容与控制符setiosflags括号中内容相同。
ubsetf( )resetiosflags( )终止已设置的输出格式状态。

cout.width(10); cout.setf(ios::hex);

3.设置格式状态的格式标志

格式标志作用
ios::left输出数据在本域宽范 围内左对齐
ios::right输出数据在本域宽范围内右对齐
ios::internal数值的符号位在域宽内左对齐,数值右对齐,中间由填充字符填充
ios::dec设置整数的基数为10
ios::oct设置整数的基数为8
ios::hex设置整数的基数为16
ios::showbase强制输出整数的基数(八进制以0打头,十六进制以0x打头)
ios::showpoint强制输出浮点数的小点和尾数0
ios::uppercase在以科学计数法输出E和十六进制输出字母X时,以大写表示
ios::showpos输出正数时,给出“+”号。
ios::scientific设置浮点数以科学计数法(即指数形式)显示
ios::fixed设置浮点数以固定的小数位数显示
ios::unitbuf每次输出后刷新所有流
ios::stdio每次输出后清除 stdout,stderr

setw(int _w)讲解 

 setw(int _w) << 输出位宽 如<< setw(7) << 1000 输出结果为 "1000 "(紧跟三个空格) 而如<< setw(3) << 1000 位宽小于原来的数字的位宽 那么按照原来的格式输出"1000" 前后无空格

setfill() 讲解

setfill(int _m) 随setw(int _w)一起使用 意思是在set(int _w)设定后的空格填充指定的字符 注意setfill里边的参数是int _m 是个整数.所以,如果我们要用空格来填充*号的时候 要使用setfill('*')[字符] 而不是setfill(*)

(1)setw(int n) 预设输出宽度

如:cout<<setw(6)<<123<<endl;

输出结果为“ 123”,在123的前面会有3个空格,123右对齐。

(2)setfill(char c) 预设填充字符

如:cout<<setfill(‘#’)<<123<<endl;

输出显示结果为“###123”,123右对齐,在前面填充3个’#’ 。

(3)setbase(int n) 预设整数输出进制

如:cout<<setbase(8)<<255<<endl;

输出显示结果为377

(4)setprecision(int n) 用于控制输出流显示浮点数的精度,整数n代表显示的浮点数数字的个数。示例程序如下:

#include <iostream>
#include <iomanip> //格式控制
using namespace std;
int main()
{   /*
   setprecision(n)设置实数的精确度为n位。(有效数字)
在以十进制小数形式输出时,n代表有效数字位数。
在以fixed(固定小数位数)形式和scientific(指数)形式输出时,n为小数位数。


setiosflags(ios::fixed) 设置浮点数以固定的小数位数显示。(即小数点后有几位数字)
setiosflags(ios::scientific) 设置浮点数以科学计数法(即指数形式)显示。


区别在于:有效数字位数 和 小数点后几位
*/  
        double amount = 22 / 7.0;
         cout << amount << endl; //(1) 默认有效位数六位
cout << setprecision(0) << amount << endl;//(2)   0就当做默认输出格式
cout << setprecision(1) << amount << endl; //(3)
cout << setprecision(2) << amount << endl;//(4)
cout << setprecision(3) << amount << endl; //(5)
cout << setprecision(4) << amount << endl; //(6)  有效数字4位
        cout << setiosflags(ios::fixed)<< setprecision(8) << amount << endl; //(7)  小数点后8位
cout << setiosflags(ios::scientific) << amount << endl; //(8)  科学计数法输出
return 0;
}

 第1行输出数值之前没有设置有效位数,所以用流的有效位数默认设置值6

 第2个输出设置了有效位数0,C++最小的有效位数为1,所以作为有效位数设置为1来看待

 第3~6行输出按设置的有效位数输出。

 第7行输出是与setiosflags(ios::fixed)合用。所以setprecision(8)设置的是小数点后面的位数,而非全部数字个数。

 第8行输出用setiosflags(ios::scientific)来表示指数表示的输出形式。其有效位数沿用上次的设置值8。

  在用指数形式输出时,setprecision(n)表示小数位数。


一、输出固定位小数 & 固定位整数

#include<iomanip>//头文件

float c = 3.234;
cout<<setiosflags(ios::fixed)<<setprecision(2)<<c<<"\n"

//输出结果3.23
setiosflags(ios::fixed): 设置浮点数以固定的小数位数显示 
setprecision(2): 是设置浮点数的精度为2位。

二、取整函数:

注意:需要头文件 math

1.ceil(x) 返回大于或等于x的最小整数值(然后转换为double型)

如:   ceil(10.5) == 11    ceil(-10.5) ==-10

2.floor(x) 返回小于或等于x的最大整数值 

 如:  floor(10.5) == 10    floor(-10.5) == -11

3.round(x) 返回x的四舍五入整数值   

如:   round(-1.3)=-1;round(-1.52)=-2;round(1.3)=1;round(1.52)=2

ceil()—取整函数(取不小于参数的最小整型数)

相关函数:fabs

头文件:#include <math.h>

定义函数:double ceil (double x);

函数说明:ceil()会返回不小于参数x 的最小整数值, 结果以double 形态返回.

范例
#include <math.h>
main()
{
    double value[] = {4.8, 1.12, -2.2, 0};
    int i;
    for (i = 0; value[i] != 0; i++)
    printf("%f=>%f\n", value[i], ceil(value[i]));
}

执行
4.800000=>5.000000
1.120000=>2.000000
-2.200000=>-2.000000





  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Taylor_29511

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

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

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

打赏作者

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

抵扣说明:

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

余额充值