C++中关于输出精度与取整函数的问题
2017-11-01 22:03
302 查看
使用这些格式需要声明包含<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: 4000 :fixed) | 设置浮点数以固定的小数位数显示。 |
setiosflags(ios::scientific) | 设置浮点数以科学计数法(即指数形式)显示。 |
setiosflags(ios::left) | 输出数据左对齐。 |
setiosflags(ios::right) | 输出数据右对齐。 |
setiosflags(ios::shipws) | 忽略前导的空格。 |
setiosflags(ios::uppercase) | 在以科学计数法输出E和十六进制输出字母X时,以大写表示。 |
setiosflags(ios::showpos) | 输出正数时,给出“+”号。 |
resetiosflags | 终止已设置的输出格式状态,在括号中应指定内容。 |
流成员函数 | 与之作用相同的控制符 | 作用 |
precision(n) | setprecision(n) | 设置实数的精度为n位。 |
width(n) | setw(n) | 设置字段宽度为n位。 |
fill(c) | setfill(c) | 设置填充字符c。 |
setf( ) | setiosflags( ) | 设置输出格式状态,括号中应给出格式状态,内容与控制符setiosflags括号中内容相同。 |
ubsetf( ) | resetiosflags( ) | 终止已设置的输出格式状态。 |
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(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
相关文章推荐
- [C++基础]cout与wcout,printf与wprintf,ofstream与wofstream关于输出中文的问题解决
- 关于C++的***5的输出问题
- C++中关于string类型究竟能不能用cout输出的问题
- 关于c/c++ 工程中获取文件路径、设置输出文件路径的问题
- 【C++学习】关于unsigned long long的输出问题
- [C++基础]cout与wcout,printf与wprintf,ofstream与wofstream关于输出中文的问题解决
- 关于c++输出菱形*的问题
- 关于输出延迟问题(C++)函数
- C++ 输入输出格式 与 精度问题
- 【C/C++】Linux C,关于刷新printf输出问题
- 关于C++多种数据类型四则运算的精度问题
- C++中关于string类型究竟能不能用cout输出的问题(转载https://www.cnblogs.com/mzct123/p/4876185.html)
- 关于C++数据类型转换和格式化输出的问题
- 关于C++的cout输出小数的精度控制
- 关于C++输出流cout的执行顺序问题
- C++中关于string类型究竟能不能用cout输出的问题
- 『C/C++』关于 wcout 输出中文的问题
- C++ 中输出精度问题
- C++中关于标准输出流cout中使用递增运算符的问题
- C++ 数据类型及相关问题 及输出精度控制