类型转换字符%f的使用。

#include <stdio.h>int main()
{float  f=123.456;double d1,d2;d1=1111111111111.111111111;d2=2222222222222.222222222;printf("%f\n%12f\n%12.2f\n%-12.2f\n%.2f\n",f,f,f,f,f);printf("d1+d2=%f\n",d1+d2);return 0;
}

运行结果:
C语言在线编辑+运行

本案例程序的输出结果中:
数据123.456001和3333333333333.333010中的001和010都是无意义的,因为它们超出了有效数字的范围。

为什么这么说?

1.什么是有效数字?
从一个数的左边第一个非0数字起,到末位数字止,所有的数字都是这个数的有效数字。
如:0.0109,前面两个0不是有效数字,后面的109均为有效数字(注意,中间的0也算)。
再如:3.109,3 1 0 9为有效数字。
——————————————————————————————————————————————————————————
2.在C语言中如何使用有效数字的?
%f 输出7位有效数字,%.Nf 最多也就16位有效数字。
也就是说一个浮点型【float】变量只能保证有效数字是7位,整体只有前7位是准确数字【或者说有效数字,有意义的数字】,超出的数是没有意义的。不同的编程工具显示的结果(指的是无意义的数字)也是有可能不相同的。
%f 默认保存6位小数,不够用0来补。

3.什么是有意义的数字?
你想啊,你定义的数字比如 f1=123.456,那么有意义的参与运算的数字就是123.456。只不过叫它为6位有效数字而已。
其他的输出除去123.456的部分都是无意义的。因为123.456是有效数字,所以它是有意义的。

案例演示:目的是为了f1=123.456打印为什么是123.456001而不是123.456000。
图片:

#include <stdio.h>int main()
{  float f1 = 123.456,f2 = 123.4567,f3 = 123.45678;printf("f1=%f\nf2=%f\nf3=%f\n",f1,f2,f3);return 0;
}

解读:
因为%f 输出7位有效数字,所以f1和f2都在有效范围之内,f3故意超出一位。
输出结果:
f1=123.456001
其中001这个随机数字是编程工具加上去的,它不是我们定义的格式控制符认为合法的有效数字,故无意义。
输出结果:
f2=123.456703
其中03这个随机数字也是编程工具加上去的,它也不是我们定义的格式控制符认为合法的有效数字,故无意义。
输出结果:
f3=123.456779 而我们定义的是123.45678,
因为%f 输出7位有效数字,f3故意超出一位,所有后面的79这个随机数字也是编程工具加上去的,它也不是我们定义的格式控制符认为合法的有效数字,故无意义。

到这里,你应该懂了:
拿%f格式控制符的有效数字来说,只要你定义的有效数字在7位之内,可以打印出来,但6位小数位缺少的会是编程工具产生的无意义的随机数。即使你的有效数字是8位,也只展示正确的前7位,余下的也是编程工具产生的随机数。

案例演示:什么时候补0
首先要搞清楚为什么会有补0这个说法?
为了使输出的数字有意义,如果都是0。那就变成整型了。所以为了控制这种误差,会补0确定精度。
结果:

一步一步加点东西,变得复杂一点的:

关键词: %f 有效数字 默认补0 【关键词的作用就是减少说话篇幅,压缩信息,你自己能脑补信息解压信息】
输出结果:
f0=987.000000
为了标识它是浮点类型,补了6个0;

输出结果:
f1=1.123000
f2=2.123400
f3=3.123450
f4=4.123456
f1,f2,f3都在有效数字范围之内,小数位数补了0是编辑器加上的,不同的数补的不一样比如 123.456 补的是 123.456001。
f4满打满算,7个有效数字正好,什么都不用加。

输出结果f5:
f5=5.234568
f5超出了有效数字,也超出了默认支持6位小数,触发了四舍五入的机制,所以:
最终 有效数字 + 四舍五入 双剑合一,得出最终结果:
f5=5.234568

输出结果:
f6=56.123322
实际定义的:
f6=56.123321
你应该懂了,【学习能力】,
结合 有效数字就可以明白,编程工具只展示 56.12332 这7个有效数字,后面那个2是无意义的,所以展示的是一个随机值。
假设把f6=56.123321 最后的1删了会怎么样?
定义成 f6=56.12332,
输出成 f6=56.123322

定义成 f6=56.12332,
输出成 f6=56.123322
结果又是多了随机值2,这是编辑器帮我们干的事情。不同的编辑器随机值可能相同,也可能不同。

其实,这就是一个%f格式控制符,在7位有效数字合法范围之内的编辑器展示结果的分析,有的时候还会触发四舍五入的机制,有的时候是整数会默认补0。
这个不是单一的情况你搜一下就能明白,你得自己列举多个情况并自己调试,让结果说话,别人说的可能是错的。

代码如下:

#include <stdio.h>int main()
{  float f0 = 987,f1 = 1.123,f2 = 2.1234,f3 = 3.12345,f4=4.123456,f5=5.2345678,f6=56.123321;printf("f0=%f\nf1=%f\nf2=%f\nf3=%f\nf4=%f\nf5=%f\nf6=%f",f0,f1,f2,f3,f4,f5,f6);return 0;
}

——————————————————————————————————————————————————————————
现在再说为什么 数据123.456001和3333333333333.333010中的001和010都是无意义的,因为它们超出了有效数字的范围。【分别是7和16】

总结成一句话:
浮点型变量直接送7位有效数字,具体的有效数字就是你定义了多少就是多少,如果编译器展示的值的位数有偏差,那有偏差的尾巴是无意义的。记住这句话就行。

有效数字就是你定义的数字,【想想数学要你保留3位有效数字,这3位有效数字当然是你自己写的定义】,
后面的尾巴001是编辑器随机加上的。

联系生活,那些做实验,经常会说在误差运行范围之内,因为计算机算的时候就存在误差,没有绝对的精确。

——————————————————————————————————————————————————————————
可以忽略的相关信息:【没有代码演示实操,建议忽略不看,只做了解内容】
对于实数,也可使用格式符%e,以标准指数形式输出:尾数中的整数部分大于等于1、小于10,小数点占一位,尾数中的小数部分占5位指数部分占4位(如e-03),其中e占一位,指数符号占一位,指数占2位,共计11位。
也可使用格式符%g,让系统根据数值的大小,自动选择%f或%e格式、且不输出无意义的零。

C语言 单精度和双精度实数输出相关推荐

  1. 关于单精度和双精度实数

    用科学计数法表示双精度实数: #include<stdio.h>int main() {double a=498465468.549;printf("%e",a); / ...

  2. c语言单精度比大小,c语言单精度和双精度的区别.pdf

    c 语言单精度和双精度的区别 c 语言单精度和双精度的区别单精度是这样的格式, 1 位符号, 8 位指数, 23 位小数. 双精度是 1 位符号, 11 位指数, 52 位小数. 区别就是它所能存储的 ...

  3. C语言数据的输入与输出

    在C语言中输入和输出为两个基本的要素. 其中我分为两个部分:第一个是字符型的输入与输出,第二种是非字符型的输入与输出. 先来讲讲字符型的-- 其中有两个函数:getchar与putchar.这两个都是 ...

  4. 【STM32H7的DSP教程】第32章 STM32H7的实数FFT的逆变换(支持单精度和双精度)

    完整版教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=94547 第32章       STM32H7的实数FFT的逆变换(支 ...

  5. 【STM32F407的DSP教程】第31章 STM32F407实数浮点FFT(支持单精度和双精度)

    完整版教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=94547 第31章       STM32F407实数浮点FFT(支持 ...

  6. 【STM32F429的DSP教程】第31章 STM32F429实数浮点FFT(支持单精度和双精度)

    完整版教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=94547 完整版教程下载地址:http://www.armbbs.cn ...

  7. c语言输入三个数求平均值和乘积,C语言输入三个实数型,计算它们的和并输出(要求保留两位小数...

    C语言输入三个实数型,计算它们的和并输出(要求保留两位小数以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! C语言输入三个 ...

  8. C语言学习笔记02-输入输出运算符

    输出输入运算符 输出和输入 printf()的基本用法 scanf()的基本用法 输入(输出)控制符 运算符 算数运算符 关系运算符 逻辑运算符 赋值运算符 输出和输入 printf()的基本用法 p ...

  9. 双精度数举例_c语言中,常量,变量,浮点,单精度,双精度是什么意思?举例...

    展开全部 实型常量又称实数或浮点数.在C语言中可以用单精度型和双精度型两种形式表示实型常量,分别用e68a84323131333532363134313032313635333133343137656 ...

最新文章

  1. 读书笔记:怪侠一枝梅 看后感
  2. C语言实现与功能的程序,用C语言实现Ping程序功能
  3. php3绕过,PHPB2B注入#3(绕过过滤)
  4. centos 使用java_如何在CentOS 8上安装Java
  5. cad2019菜单栏怎么调出来_Mac苹果鼠标移动速度设置到最快还是太慢了,你可以这样调~...
  6. Xilinx FPGA芯片命名规则
  7. sqlite遇到database is locked问题的完美解决
  8. 6、raid、lvm、while、until 学习笔记
  9. 粒子滤波算法matlab代码,粒子滤波算法原理及Matlab程序(专题).ppt
  10. 不要迷恋哥,哥只是个传说!
  11. 计算机二级Python错题
  12. 《Cisco VPP SFC》4、ODL SFC 安装
  13. 【规划】一个计算机专业学生几年的编程经验汇总
  14. 皮卡洞察报告2021版——附下载链接
  15. uc同步登陆同步退出
  16. onvif/rtsp转gb28181协议,无缝对接国标平台
  17. 基因数据处理56之bwa运行paird-end(1千万条100bp的reads).md
  18. c# record的使用场景
  19. 【深入理解TcaplusDB技术】TcaplusDB机器如何初始化和上架
  20. 微信小程序自定义组件-behaviors

热门文章

  1. Android 数据漫游默认值的修改方法
  2. python excel截图保存_python 对excel进行截图
  3. 【看表情包学Linux】初识文件描述符 | 虚拟文件系统 (VFS) 初探 | 系统传递标记位 | O_TRUNC | O_APPEND
  4. MFC—— AfxMessageBox
  5. SQL数据库中 一些常使用的约束 排序 系统函数的用法 与联合主键
  6. cad线性标注命令_CAD线性标注快捷键命令(教你如何标注滚轮尺寸)
  7. java的Object类有哪些方法
  8. 【数学结论】51Nod 1674 区间的价值 V2
  9. 信号(signal)介绍
  10. 联想扬天V15(i5 8265U/8GB/256GB/MX110)电脑 Hackintosh 黑苹果efi引导文件