8

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

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

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

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

4

2 回答 2

16

floata和 an相乘的结果int是 a 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
于 2013-06-12T04:29:04.273 回答
3

或者,你也可以这样做

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

这将打印您(有点)期望的结果。

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

于 2013-06-12T05:25:48.973 回答