如何在C语言编程中实现int到Double的转换

nbysray5  于 2022-12-29  发布在  其他
关注(0)|答案(6)|浏览(341)
int num1, num2;

第一个月

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

我的测试printf显示平均值为:0
这可能太简单了,但我看不出来,我的输入都是int,平均值是double,但不知怎么的,它计算不对?

inb24sb2

inb24sb21#

您对printf使用了错误的格式说明符。
%d说明符需要int参数,但您传递的是double。使用错误的格式说明符将调用undefined behavior
要打印double,请使用%f

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

qxsslcnc2#

无需修改语句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;
}
58wvjzkj

58wvjzkj3#

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
u0sqgete

u0sqgete4#

您应该使用printf(“平均值= %f”,平均值);而不是使用“%d”来打印平均值。我想这会解决你的问题...

xu3bshqb

xu3bshqb5#

整数除法产生整数结果: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 );
ioekq8ef

ioekq8ef6#

如果需要浮点结果,则至少有一个操作数必须是浮点类型
这是我的解决方案:
平均值=(数量1+数量2)/(双精度)2;
printf(“1/2的值为:%.4f\n”,(双精度)(1/2));
1/2的值为:0.0000
printf(“1/2的值为:%.4f\n”,(1/(双精度)2));
1/2的值为:0.5000

相关问题