C语言中“浮点数”极度难以理解的难点

C语言中“浮点数”极其难以理解的难点。
#include<stdio.h>

void main()

{

       float a;

       printf("请输入数字:");

       scanf("%e",&a);

       printf("结果是:%e\n",a);

 

}

请输入数字:2.2e-2

结果是:2.200000e-002

Press any key to continue

问题如图所示,亟待高手详解。谢谢。

 追问scanf("%e",&a); (输入的是 float型的。为什么不会按float型的截断,而造成错误?毕竟有小数点的,化为二进制的时候,可以远远超出float型所能容纳的范围。)       printf("结果是:%e\n",a);

计算机所使用的二进制0,1代码无法准确表示某些“带小数”位的十进制数据。例如十进制数0.65 等于二进制数0.1010011001100110011001100110011……(用十进制→二进制时的“乘2取整”可得。)十进制数0.6  等于二进制数 0.10011001100110011001100110011001……(用十进制→二进制时的“乘2取整”可得。

试试printf("结果是:%.100e\n",a);  请输入数字:2.2e-2


请输入数字:2.2e-2结果是:2.1999999880790710000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-002为什么此时又错了呢?亟待详解。为什么这里又会被截断?而%e时候左边却“不会”,且相同都为%e的时候左边的又“会”被截断。这是为什么呢?
C printf

------解决方案--------------------
C语言中“浮点数”极度难以理解的难点
------解决方案--------------------
值不一样,相减后是个约数,a-b不等于d
------解决方案--------------------
你让它显示那么多位出来,当然就显示出来了。不然就给你一个约数
------解决方案--------------------
引用:
Quote: 引用:

C语言中“浮点数”极度难以理解的难点


您上面用的是什么软件呢?是否有那个软件的使用教程?谢谢。亟待着您的回复。谢谢。

vc++6.0的debug
------解决方案--------------------
听不太懂你的问题是什么.
不过浮点数,研究了几十年了,
问题依然还是存在.所以,你如果
只是学习的初步阶段,不要太纠结于
这个问题了,了解了解就好.
另外.float的精度6~7位,double的精度15~16.
不知道记没记错.如果超过了这个精度,当然显示不出来了.
肯定不是printf("%.100lf")能够解决的.