引言

当cout一些位数较多的数字时,大家可能都遇到过以下三种情况

//类型一:整数位很多
double x=12345678;
//类型二:小数位很多,有效小数位少
double y=0.00001234;
//类型三:小数位很多,有效小数位也多
double z=3.1415926;cout<<x<<endl;
cout<<y<<endl;
cout<<z<<endl;

运行结果如下:

1.23457e+07
1.234e-05
3.14159

前两个数采用了科学记数法(scientific notation),第三个数保留了5位小数。

浮点数与整数

相信大家可以从这三个例子看出,三个数数据类型都是double, 而不是整数型。
那么整数型会出现什么情形呢?

//注意不要太大,使其溢出
int x=12345678;
cout<<x<<endl;

运行结果如下

12345678

对比之前的double类型

double x=12345678;
cout<<x<<endl;

输出结果是

1.23457e+07

由此我们可以发现浮点数有其独特的输出方式,即会在一定情况下使用科学记数法,int就没有哟。

默认浮点数记数法

那么根据http://www.cplusplus.com/reference/ios/defaultfloat/
的内容加我们的实验,可以总结出一些浮点数输出默认的规则。
Use default floating-point notation
Sets the floatfield format flag for the str stream to defaultfloat.

When floatfield is set to defaultfloat, floating-point values are written using the default notation: the representation uses as many meaningful digits as needed up to the stream’s decimal precision (precision), counting both the digits before and after the decimal point (if any).

意思就是说,把一个叫floatflied的格式标示设置为defaultfloat使,浮点数用默认记数法编写:这种表示方法尽可能用多的位数,这个位数包括小数点前及小数点后的位数。

For standard streams, the floatfield format flag is set to this value (defaultfloat) on initialization.
初始情况下(即未手动给floatfield赋值的时),也就是说floatflied默认值就是defaultfloat。

默认记数法有什么特点呢?

1)保留有效位至多6位(有效位包括小数点前的位数,正如上文译文提到的)
请回看引言举例里的类型三!

知道大家懒。。

//类型三:小数位很多,有效小数位也多
double z=3.1415926;
cout<<z<<endl;

输出结果是

3.14159

此处,截取数字的规则是四舍五入!!!(请记住这一点,下文要用到)

当然,如果浮点数本来就位数很少,比如0.5,输出就是0.5,不会用0补齐到6位有效数字

2)删去无效位数(也算是第一点的进一步说明)

double x=2.0;
cout<<x<<endl;

输出结果

2

这里举一个有意思的例子!!

double x=1.234595;
cout<<x<<endl;

大家先想想,保留六位数字应该输出什么!!
答案是

1.2346

诶诶,为什么不是六位!!
先截取6位,下一位要四舍五入,而下一位是5,要进位,而上一位恰恰是9,9+1=10,要再往前一位加一,即4要加一,本应该输出1.23460,但是末尾的0不算是有效数位,根据规则二(本规则)要删去,即输出1.2346这个有效数位5位的数啦!!

3)适当情况下会用科学记数法(scientific notation)
请看引言的情况一,情况二!!!
好吧,我搬过来。

//类型一:整数位很多
double x=12345678;
//类型二:小数位很多,有效小数位少
double y=0.00001234;cout<<x<<endl;
cout<<y<<endl;

输出结果是:

1.23457e+07
1.234e-05

fixed

那么如何消除浮点数的科学计数法呢?
答案是用fixed,一个manipulator。

//类型一:整数位很多
double x=12345678;
//类型二:小数位很多,有效小数位少
double y=0.00001234;cout<<fixed<<x<<endl;
cout<<fixed<<y<<endl;

输出结果是:

12345678.000000
0.000012

其实只要出现了fixed,则后面都是以fixed输出。
那么只需要写

cout<<fixed<<x<<endl;
cout<<y<<endl;//之后不用再打一遍fixed了

特点是:无科学记数法而且小数点后的位数是6位!!!
其实看fixed难道不眼熟吗??
上一篇博客讲到了定点数和浮点数的区别,定点数就是fixed-point number呀!!
这里的fixed也是指"write floating-point values in fixed-point notation",用定点表示法表示浮点数!!

setprecision()

相信大家都知道,fixed与setprecision(n)连用可以控制小数点后的位数,现在就可以理解因为那是定点数记数法。

如果没有fixed的话,就是浮点数记数法了,那么它控制的应该就是有效数字的位数(包括小数点前的)!!!!!

大家应该很清楚了,但还是举个例子吧。

double x = 0.123456;double y = 1.123456;cout  << x << endl;cout << y << endl;
0.123456
1.12346

setw()

若想用setw(int n)呢,要加头文件 < iomanip > [io+manipulator的意思]
其控制后面输出的长度,默认右对齐,输出内容长度不够用空格补齐,输出内容长度超过则正常输出。
注:1. setw()只对后面紧跟的输出有限制。
2. 标点符号占一位!

 double x = 0.1;double y = 0.123456;cout  <<setw(7)<< x << endl;cout << x << endl;cout << setw(3)<<y << endl;

输出结果是

    0.1
0.1
0.123456

感谢阅读。欢迎读者们指正错误或提问!

详解C++中fixed,setprecision(),setw()的用法相关推荐

  1. python join_详解Python中的join()函数的用法

    函数:string.join() Python中有join()和os.path.join()两个函数,具体作用如下: join(): 连接字符串数组.将字符串.元组.列表中的元素以指定的字符(分隔符) ...

  2. python scatter参数详解_Python 中 scatter 函数参数及用法详解

    Python 中 scatter 函数参数及用法详解 Python 中 scatter 函数参数及用法详解 这里有新鲜出炉的 Python 教程, 程序狗速度看过来! Python 编程语言 Pyth ...

  3. python循环语句-详解Python中的循环语句的用法

    一.简介 Python的条件和循环语句,决定了程序的控制流程,体现结构的多样性.须重要理解,if.while.for以及与它们相搭配的 else. elif.break.continue和pass语句 ...

  4. python scatter参数详解_Python中scatter函数参数及用法详解

    最近开始学习Python编程,遇到scatter函数,感觉里面的参数不知道什么意思于是查资料,最后总结如下: 1.scatter函数原型 2.其中散点的形状参数marker如下: 3.其中颜色参数c如 ...

  5. python的for语句-详解Python中的循环语句的用法

    一.简介 Python的条件和循环语句,决定了程序的控制流程,体现结构的多样性.须重要理解,if.while.for以及与它们相搭配的 else. elif.break.continue和pass语句 ...

  6. 详解Django中Request对象的相关用法

    1.从Request对象中获取数据 我们在第三章讲述View的函数时已经介绍过HttpRequest对象了,但当时并没有讲太多. 让我们回忆下:每个view函数的第一个参数是一个HttpRequest ...

  7. python语句join_详解Python中的join()函数的用法

    原博文 2017-08-07 20:51 − 函数:string.join() Python中有join()和os.path.join()两个函数,具体作用如下: join(): 连接字符串数组.将字 ...

  8. 详解Python中的join()函数的用法(字符串和os.path)

    函数:string.join()  Python中有join()和os.path.join()两个函数,具体作用如下:  join(): 连接字符串数组.将字符串.元组.列表中的元素以指定的字符(分隔 ...

  9. linux uname命令详解,linux中uname命令参数及用法详解

    uname 命令可用于大多数 UNIX 和类 UNIX 系统以及 Linux. 功能说明:uname用来获取电脑和操作系统的相关信息. 语 法:uname [-amnrsvpio][--help][- ...

  10. 三维空间刚体运动5:详解SLAM中显示机器人运动轨迹及相机位姿(原理流程)

    三维空间刚体运动5:详解SLAM中显示机器人运动轨迹及相机位姿(原理流程) 一.显示运动轨迹原理讲解 二.前期准备 三.git管理子模块及克隆源代码 1.学习使用Git Submodule 2.克隆源 ...

最新文章

  1. IPv6的脚步声近了!
  2. unity中单位是米还是厘米_401场地清理是什么,由施工单位做还是甲方做?造价中如何体现?...
  3. b站电脑客户端_如何将B站的flv格式的视频转换成mp4格式
  4. Asterisk针对Mysql的extconfig.conf配置
  5. 入局视频会议市场 揭秘“腾讯会议”背后的创新黑科技
  6. 用户自定义属性表结构设计_属性类型定制及其妙用
  7. 搜狗输入法电脑版_四款“真·无广告”的良心靠谱输入法推荐 2020
  8. 扫掠曲面二条引导线_说说国策下的三四线城市与会展
  9. 测试鼠标传感器的软件,光电鼠标传感器的精密测量与控制系统 - 嵌入式设计应用 - 电子发烧友网...
  10. 算法与数据结构(基于C语言)中线性表的快速排序快速查找
  11. R2-React之ES6基础
  12. npn三种波形失真_三极管放大电路各点电压、电流波形图
  13. 什么是公网IP和内网IP?
  14. 管理:重要性影响力方格
  15. 软件测试面试经常会被问到的三大问题(面试常考)
  16. BZOJ 2101: [Usaco2010 Dec]Treasure Chest 藏宝箱(这是我写过最骚气的dp!)
  17. AI中插入带圆圈的1-20数字
  18. 【长篇博文】Docker学习笔记与深度学习环境的搭建和部署(二)
  19. 2022年上半年财神爷最爱照顾的星座
  20. 怎么把一张普通照片变成一寸照?这个小技巧了解一下

热门文章

  1. html submit提交事件,submit方法与onsubmit事件
  2. mysql视图存放位置_MySQL基础备忘(2)之视图
  3. 中南大学计算机大一学什么时候发,中南大学计算机学院2019年夏令营
  4. linux roundup函数记录
  5. 还不会记录脚本日志吗?戳这里 ->>> python中logging模块二次封装记录脚本的每一步脚印
  6. 我,阿里P7,找不到工作
  7. 浅析集线器、交换机、路由器
  8. 中继器、集线器、网桥、交换机、路由器、网关的超全总结
  9. 黑CNN网站:解恨但不明智
  10. android+状态栏显示图标大全,状态栏中的Android显示图标