如何在C中乘以浮点数和整数?

时间:2013-06-12 04:28:04

标签: c integer operation

当我执行此代码时,它返回1610612736

void main(){
float a=3.3f;
int b=2;
printf("%d",a*b);
}

为什么以及如何解决这个问题?

编辑:它甚至不是整数和浮点数,如果我替换int b = 2:浮点数b = 2.0f它返回相同的愚蠢结果

2 个答案:

答案 0 :(得分:11)

floatint相乘的结果是float。除此之外,它会在传递给double时升级为printf。您需要%a%e%f%g格式。 %d格式用于打印int类型。

编辑说明:main的返回值应为int。这是一个固定的程序:

#include <stdio.h>

int main(void)
{
    float a = 3.3f;
    int b = 2;
    printf("%a\n", a * b);
    printf("%e\n", a * b);
    printf("%f\n", a * b);
    printf("%g\n", a * b);
    return 0;
}

及其输出:

$ ./example 
0x1.a66666p+2
6.600000e+00
6.600000
6.6

答案 1 :(得分:2)

或者,您也可以

printf("%d\n", (int)(a*b));

这将打印出您(期待)的结果。

您应该始终明确地对变量进行类型转换以匹配格式字符串,否则您可能会看到打印出一些奇怪的值。