C++中关于输出精度与取整函数的问题
来源:互联网 发布:mac未知来源 编辑:程序博客网 时间:2024/05/22 15:57
使用这些格式需要声明包含<iomanip>
1.使用控制符控制输出格式
控制符作用dec设置整数的基数为10hex设置整数的基数为16oct设置 整数的基数为8setbase(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设置整数的基数为10ios::oct设置整数的基数为8ios::hex设置整数的基数为16ios::showbase强制输出整数的基数(八进制以0打头,十六进制以0x打头)ios::showpoint强制输出浮点数的小点和尾数0ios::uppercase在以科学计数法输出E和十六进制输出字母X时,以大写表示ios::showpos输出正数时,给出“+”号。ios::scientific设置浮点数以科学计数法(即指数形式)显示ios::fixed设置浮点数以固定的小数位数显示ios::unitbuf每次输出后刷新所有流ios::stdio每次输出后清除 stdout,stderrsetw(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
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()—取整函数(取不小于参数的最小整型数)
头文件:#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
- C++中关于输出精度与取整函数的问题
- 关于js中parseFloat()函数精度的问题
- 关于C++builder中精度丢失的问题
- 关于浮点数的精度与取值范围的问题
- 关于浮点数的精度与取值范围的问题
- 关于浮点数的精度与取值范围的问题
- 关于浮点数的精度与取值范围的问题
- 关于浮点数的精度与取值范围的问题
- 关于浮点数的精度与取值范围的问题
- 关于float与double的精度问题
- 关于LBS坐标系与精度的问题
- C++ 中输出精度问题
- Java中关于精度丢失的问题
- 关于单精度和双精度的取值范围问题
- C++、C中有关double、float类型转换成int型,及取整,丢失精度问题。
- 关于C语言中对数组取址的问题
- C语言中关于错误输出的函数
- double取整,计算时的精度问题
- 63-C语言异常处理
- idea的快捷键大全
- STM32(RFID)阶段一:添加串口USART2,修改中断接收协议
- 大数据(二十六)Hive【Hive 优化】
- DOS/DDOS攻击
- C++中关于输出精度与取整函数的问题
- ajax是什么? ajax的交互模型? 同步和异步的区别? 如何解决跨域问题?
- ZOJ 3993(2017CCPC秦皇岛站M题)Safest Buildings
- 简单计算器
- SurfaceView 实现动态曲线
- HDU 4283 You Are the One(区间DP)
- 1397 Goldbach's Conjecture
- c语言 rand()和srand()函数用法
- ubuntu 升级后无法连接wifi问题(Wireless 8265 / 8275网卡)