C语言 Warning C4244精度问题

2024-12-05 00:09:56
推荐回答(3个)
回答1:

当编译器先看见5时,认为这是整数运算,于是5/9就成了0.
当看见5.0时,编译器知道这是浮点数运算,于是一切就正确了。
当没有说明数据类型时,C语言就用自以为的类型进行处理,并且在需要的时候进行强制类型转换。

回答2:

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。使用/的时候会保留小数

回答3:

5/9系统把5和9以整数处理,所以运算结果也是整数,由于这个结果的整数部分是0,所以5/9的结果就是0.
5.0/9系统会进行类型提升,将两个数字转换为double类型,所以可以计算出期望的结果。