浮点数
在文言文《邹忌讽齐王纳谏》中有一句“邹忌修八尺有余”,这里的八尺指的是古代的“尺”也就是我国的“市尺”,但是在当今社会中我们更喜欢说自己一米几也就是用公尺来衡量我们的身高,那么古代的七尺男儿到底是我们现代的多高呢。我们来编写一个程序来计算一下。
#include<stdio.h>
int main()
{
printf("请分别输入身高的尺与寸,"
"如输入"5 7"表示5尺7寸:");
int chi;
int cun;
scanf("%d %d",&chi,&cun);
printf("身高是%f米。\n",(chi+cun/10)*0.3333);
return 0;
}
在上面的程序中我们输入7 3
会得到:
如果输入7 6
:
这里我们会发现好像我们的程序不管用了,那么我们要思考我们的程序在什么地方错了。这是因为我们在计算中将寸除以了十,而在C语言中两个整数的运算结果只能是整数。也就是说在C语言中10与10.0是完全不同的两个数。所以我们程序中的cun/10
只能得到0这个值,所以寸的计算在我们的程序中就不生效了。
那么我们应该怎样处理呢,这里我们应该用10.0的样式来计算也就是使用C语言中的浮点数来修改程序。
浮点类型
修改方案1(chi+cun/10)*0.3333)
→(chi+cun/10.0)*0.3333)
:
#include<stdio.h>
int main()
{
printf("请分别输入身高的尺与寸,"
"如输入"5 7"表示5尺7寸:");
int chi;
int cun;
scanf("%d %d",&chi,&cun);
printf("身高是%f米。\n",(chi+cun/10.0)*0.3333);
return 0;
}
当浮点数和整数放到一起运算时,C会将整数转换成浮点数,然后进行浮点数的运算。
修改方案2(将变量改为浮点型):
#include<stdio.h>
int main()
{
printf("请分别输入身高的尺与寸,"
"如输入"5 7"表示5尺7寸:");
double chi;
double cun;
scanf("%lf %lf",&chi,&cun);
printf("身高是%f米。\n",(chi+cun/10)*0.3333);
return 0;
}
注意:如果我们将变量修改为为浮点型的话要将scanf()
函数中的%d
改为%lf
。
精度:
我们这里用的浮点类型是double
也就是双进度浮点数那么在浮点类型中还有其它进度的类型它们的储存大小、值范围和进度如下表:
类型 | 存储大小 | 值范围 | 精度 |
---|---|---|---|
float | 4 字节 | 1.2E-38 到 3.4E+38 | 6 位有效位 |
double | 8 字节 | 2.3E-308 到 1.7E+308 | 15 位有效位 |
long double | 16 字节 | 3.4E-4932 到 1.1E+4932 | 19 位有效位 |