打印浮点值时出现问题

时间:2012-04-25 20:42:25

标签: c++ c printf

#include<stdio.h>
#include<math.h> 
int main()
{
   float i = 2.5;
   printf("%d\n%d\n%d",i,i,i);
}

当我使用gcc编译它并运行它时,我将其作为输出:

0
1074003968
0

为什么不打印

2
2
2

4 个答案:

答案 0 :(得分:12)

您将float(将转换为double)传递给printf,但告诉printf期待int。结果是未定义的行为,所以至少在理论上,任何事情都可能发生。

通常发生的是printf将从堆栈中检索sizeof(int)个字节,并解释它们作为int保留的任何位模式,并打印出任何代表的价值。

您几乎肯定想要的是将float转换为int,然后再将其传递给printf

答案 1 :(得分:2)

"%d"格式说明符用于十进制整数。请改用"%f"

花一点时间阅读printf() man page

答案 2 :(得分:1)

“%d”是十进制整数的指定符(通常是32位整数),而“%f”说明符用于十进制浮点。 (通常是双人或浮动)。

如果您只想要浮点数的非小数部分,则可以将精度指定为0。

float i = 2.5;
printf("%.0f\n%.0f\n%.0f",i,i,i);  

请注意,您也可以将每个值转换为int,它会得到相同的结果。

printf("%d\n%d\n%d",int(i),int(i),int(i));

答案 3 :(得分:0)

%d打印十进制(int) s,而非(float) s。 printf()无法告诉您已将(float)传递给它(C没有本机对象;您无法询问值是什么类型的值);你需要为你传递的类型使用适当的格式字符。