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);这样写就可以,求详解?
展开
 我来答
Dan_Brown
推荐于2017-10-13 · TA获得超过297个赞
知道小有建树答主
回答量:268
采纳率:100%
帮助的人:202万
展开全部
当编译器先看见5时,认为这是整数运算,于是5/9就成了0.
当看见5.0时,编译器知道这是浮点数运算,于是一切就正确了。
当没有说明数据类型时,C语言就用自以为的类型进行处理,并且在需要的时候进行强制类型转换。
wuiiao333
2015-01-29 · TA获得超过799个赞
知道小有建树答主
回答量:666
采纳率:0%
帮助的人:202万
展开全部
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。使用/的时候会保留小数
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2015-01-29
展开全部
5/9系统把5和9以整数处理,所以运算结果也是整数,由于这个结果的整数部分是0,所以5/9的结果就是0.
5.0/9系统会进行类型提升,将两个数字转换为double类型,所以可以计算出期望的结果。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式