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的时候左边的又“会”被截断。这是为什么呢?
[解决办法]
值不一样,相减后是个约数,a-b不等于d
[解决办法]
你让它显示那么多位出来,当然就显示出来了。不然就给你一个约数
[解决办法]