69,371
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
int main()
{
int cmlen;
scanf("%d",&cmlen);
int foot= cmlen/100.0/0.3048;
printf("foot: %d\n", foot);
int inch = (cmlen/100.0/0.3048-foot)*12;
printf("%lf\n", cmlen/100.0/0.3048);
printf("%d %d\n",foot,inch);
return 0;
}
A程序中(cmlen/100.0/0.3048-foot)*12这个表达式是会隐式转换为double类型,计算出的结果为double类型,赋值给inch,即又强制转换为int类型,取整。
B程序呢,如下,由于cm为整型数,所以cm = cm/ 100.0强制转为int,170/100.0= 1.70,转整型为1,可以发现在这儿已经减少了很多,0.7;所以分开计算会导致丢掉小数部分。使其精度降低。程序A不会在计算中丢失小数部分,因为在赋值inch之前一直是隐式转换为double类型了,foot一样,cmlen/100.0/0.3048;这个表达式按照double类型计算;
#include<stdio.h>
int main()
{
int cm;
scanf("%d",&cm);
cm = cm/100.0;
printf("cm = %d\n", cm);
int foot= cm/0.3048;
printf("foot = %d\n", foot);
int inch= (cm/0.3048 - foot)*12;
printf("%d %d\n",foot,inch);// 输出
return 0;
}