如何在C编程中将int转换为Double

How to convert int to Double in C programming

int num1, num2;

double average;

average=(double)(num1+num2)/2;
printf("average: %d", average);

我的测试 printf 显示平均值为:0

这可能太简单了,但我看不到。我的输入都是 "int",平均值是 "double" 但不知何故计算不正确?

您对 printf 使用了错误的格式说明符。

%d 格式说明符需要一个 int 参数,但您传递的是 double。使用错误的格式说明符调用 undefined behavior.

要打印 double,请使用 %f

printf("average: %f\n", average);

无需修改语句 average=(double)(num1+num2)/2; 即可在 printf 中获得预期结果 使用 %f 而不是 %d

  • 第一次(num1+num2)被执行,结果是integral类型。让我们说 15。接下来,当您执行 (double)15/2 结果时,结果是 floating 类型,即 7.500000.
  • 从上一步 average = (double)7.500000 平均保持 7.500000 但由于您在 %d 中打印,您得到 0 作为其未定义的行为。而是使用 %f

这是工作的

int main() {
        int num1 = 7, num2 = 8;
        double average;
        average = (double)(num1 + num2)/2;
        printf("average: %f\n", average);
        return 0;
} 
int num1, num2;
double average;
average=(num1+num2)/2.;            // Using a decimal point forces 2 to be a double.
printf("average: %f\n", average);  // Use the correct specifier for double: %f

你应该使用 printf("average= %f",averge);而不是使用“%d”打印平均值 value.I 认为它会解决您的问题...

整数除法得到一个整数结果:1/2 == 05/3 == 1等。如果你想要一个浮点结果,至少有一个操作数必须是浮点类型:1/2.0f == 0.5f5/3.0 == 1.6667

因此,您需要将总和除以 2.0,而不是 2:

average = (num1 + num2)/2.0;

其次,浮点数输出需要使用%f格式说明符:

printf( "average: %f\n", average );