C语言 Warning C4244精度问题
#include<stdio.h>voidmain(){intfahr;floatcelsius;for(fahr=-40;fahr<=110;fahr=fahr+10)...
#include <stdio.h>
void main()
{
int fahr;
float celsius;
for(fahr=-40;fahr<=110;fahr=fahr+10)
{
celsius=5/9*(fahr-32);
printf("%4d %6.1f \n",fahr,celsius);
}
}
celsius=5/9*(fahr-32);这样写输出结果不正确, celsius=5.0/9*(fahr-32);这样写就可以,求详解? 展开
void main()
{
int fahr;
float celsius;
for(fahr=-40;fahr<=110;fahr=fahr+10)
{
celsius=5/9*(fahr-32);
printf("%4d %6.1f \n",fahr,celsius);
}
}
celsius=5/9*(fahr-32);这样写输出结果不正确, celsius=5.0/9*(fahr-32);这样写就可以,求详解? 展开
3个回答
展开全部
fahr 是int类型,int类型会把小数都去掉的。
5/9*(fahr-32) //当中都是int,所以5 9 32都不会转换成别的类型,都是int。所以使用5/x 会去掉小数
5.0/9*(fahr-32) //当中5.0是double类型 ,9*(fahr-32) 提升为double。使用/的时候会保留小数
5/9*(fahr-32) //当中都是int,所以5 9 32都不会转换成别的类型,都是int。所以使用5/x 会去掉小数
5.0/9*(fahr-32) //当中5.0是double类型 ,9*(fahr-32) 提升为double。使用/的时候会保留小数
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2015-01-29
展开全部
5/9系统把5和9以整数处理,所以运算结果也是整数,由于这个结果的整数部分是0,所以5/9的结果就是0.
5.0/9系统会进行类型提升,将两个数字转换为double类型,所以可以计算出期望的结果。
5.0/9系统会进行类型提升,将两个数字转换为double类型,所以可以计算出期望的结果。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询