当我运行以下代码时,我得到正确的加法,减法,乘法的答案但是除法给出了错误的答案:
#include<stdio.h>
#include<conio.h>
int main()
{
int num1, num2, add, sub, mul, div;
printf("Enter numbers \n");
scanf_s("%d %d", &num1, &num2);
add = num1 + num2;
sub = num1 - num2;
mul = num1 * num2;
div = (float)(num1 / num2); // typecasting
printf("Addition answer = %d \n", add);
printf("Subtraction answer = %d \n", sub);
printf("Multiplication answer = %d \n", mul);
printf("Division answer = %.2f \n", div);
_getch();
return 0;
}
Division = 0.00 ??
的原因是什么?答案 0 :(得分:2)
div = (float)(num1 / num2); // typecasting
错了,你应该施放操作数
div = (float)num1 / (float)num2;
当然,您应该声明
float div;
并且在所有警告的情况下,一个好的编译器(如gcc -Wall -g
调用GCC)会注意到printf
实际上,您最好使用double
代替float
,因为printf(3) %.2f
需要 double 参数...(但是将参数传递给float
时,double
值会提升为printf
。
所以你的代码应该是
double div = (double)num1 / (double)num2;
printf("Division answer = %.2f \n", div);
了解floating point和the floating point guide以及what every programmer should know about floating point
答案 1 :(得分:1)
您将div
声明为整数,但将其打印为浮点数。整数和浮点数的二进制格式不一样,因此会导致打印错误的值。
将div
声明为float
,或将其打印为整数。
您应该构建更多警告,因为这可能是两个警告的原因:首先将float
分配给int
,然后将int
打印为float
。
答案 2 :(得分:0)
float num1, num2, add, sub, mul, div;
需要是一个浮点数,否则它将降至0.00
或者您需要使用浮动
来投射它们答案 3 :(得分:0)
正在进行整数除法。即整数 - 然后转换为浮点
答案 4 :(得分:0)
dev
被定义为整数,然后以%f
格式打印。您需要将其定义为浮动。
答案 5 :(得分:0)
#include<stdio.h>
#include<conio.h>
int main()
{
int num1, num2, add, sub, mul;
float div;
printf("Enter numbers \n");
scanf_s("%d %d", &num1, &num2);
add = num1 + num2;
sub = num1 - num2;
mul = num1 * num2;
div = (float)(num1 / num2); // typecasting
printf("Addition answer = %d \n", add);
printf("Subtraction answer = %d \n", sub);
printf("Multiplication answer = %d \n", mul);
printf("Division answer = %.2f \n", div);
_getch();
return 0;
}
答案 6 :(得分:0)
首先,你将div声明为整数。所以如果你将两个浮点数的除法存储在整数变量中那么你会得到错误的答案。
你应该将div声明为float。像,
float div;
并且你的类型转换应该是,
div = (float)num1/(float) num2;
然后你会得到正确答案。