将整数打印为浮点数

时间:2012-11-27 16:45:47

标签: c floating-point

  

可能重复:
  What is printf’s behaviour when printing an int as float?

int main()
{
 int x=4;
 int y=987634;
 printf("%f %f",x,y);
}

在编译此代码时,我得到的输出为0.000000 0.000000。难道不存在x和y到浮点数的类型提升吗? O / P不应该是4.000000和987634.000000吗? 谁能帮我这个。提前完成。

5 个答案:

答案 0 :(得分:5)

对包含特定参数的原型的函数的参数进行转换。 printf()的原型不包括第一个

之后的特定参数
int printf(const char *format, ...);

所以,第一个之后没有参数自动转换,除非“默认参数转换”定义(基本上任何排名低于int的整数类型到int和任何浮点类型排名低于doubledouble谢谢你,Pascal Cuoq ))。您需要使用强制转换操作

自行转换它们
    printf("%f %f\n", (double)x, (double)y);

哦......你真的,真的,真的应该包含有问题原型的标题(在未定义行为的惩罚下)

#include <stdio.h>

答案 1 :(得分:1)

编译器不知道您的printf格式字符串会将参数解释为浮点数。它将它们直接传递为int s。

因为printf是一个varargs函数,所以你需要传递有意义的参数。

答案 2 :(得分:0)

尝试printf("%i %i",x,y);将整数打印为4 987634。有关printf格式详细信息,请参阅http://www.cplusplus.com/reference/cstdio/printf/

答案 3 :(得分:0)

intfloat在内存中的存储方式不同,但您的编译器不知道您想要浮点数。您需要明确地转换它们。

printf("%f %f",(float)x,(float)y);

答案 4 :(得分:0)

变量函数(printf()为1)未进行类型检查,因为可变参数不包含任何类型信息。因此,没有隐式类型转换。你必须手动完成:

printf("%f %f", (double)x, (double)y);