不能理解C语言中的带小数的运算逻辑。为什么cm/30.48 的结果这么奇怪?求解运算逻辑?

代码如下:

img

img

**不能理解C语言中的带小数的运算逻辑。为什么cm/30.48 的结果这么奇怪?求解运算逻辑?**

因为170/30.48结果是个double型
而你用%d输出的是int型,输出之前你又没有将结果强制转换成int,导致它把double型的前4个字节当做int输出
而你输出foot的时候就很正常,因为foot本身是int型,double已经隐式的转换为了int
这种丢失精度的转换在c++,c#等类似的语法中是不允许的,但是c中允许。

逻辑没问题
你的输出是%d而且foot是int型的啊
肯定不行啊
把类型换一下并且输出换一下

cm/30.48的结果是浮点型,浮点型存储和整型是不一样的,你用%d去格式化,相当于将浮点数的内存值直接按照整型去理解,那最终的结果没啥毛病。除非你先强制转换为整型。