C语言中double转int时为什么出现乱码,具体如下图

如题所述

如果你对a或者b使用f格式打印也能打印出一个浮点数,一个我们认为是乱码的数值,这个奇怪吗?不同数值之间转换需要强制类型转换的,默认类型转换是在运算或者赋值的时候才能起作用的,在传递函数形参默认不会进行类型转换。所以加上强制类型转换就没有你所谓的乱码了。
其实你看到的也不是乱码,这个数是double类型数据(低4字节)在内存存放的二进制格式数换算成整数的结果。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-07-17
数据类型的转换都是通过转为二进制再转化为其他的,浮点型的二进制与整形的二进制转化规则不同,所以你这样造成数据丢失出现乱码很正常追问

那该如何改进呢

第2个回答  2014-07-17
printf("c=%d\n", (int)c); // 需要使用 (int)c 才能转为 int

第3个回答  2014-07-17
用"%lf"输出double类型的数值。追问

抱歉,我问的不是这个意思,我的意思是说为什么会出现这种现象

追答

造成错误的输出结果随编译平台的实现不同而不同,但用"%d"输出double类型的值本身就是错误的,就像用尺子测量气体密度一样不可思议。

相似回答