我一直用C编写这个程序,我注意到fee
变量中捕获的除法结果总是固定值, 5.00 < / strong>,但结果应 5.78 。
你能解释为什么它有这种行为,我该怎么做才能解决它
?
#include <stdio.h>
#include <stdlib.h>
int main(void){
printf("Input package dimensions: width, heigth, length \n");
int width, height, length;
scanf("%d", &width );
scanf("%d", &height );
scanf("%d", &length );
int weight = width*height*length;
printf("%d\n", weight);
float fee = weight/166;
printf("%.2f\n", fee);
printf("The fee is : $%.2f\n and", fee);
system("pause");
return 0;
}
答案 0 :(得分:4)
那是因为你把int除以int。要获得浮点数,其中至少有一个应该是浮点数。
float fee = weight/166.0;
答案 1 :(得分:4)
weight
和166
都有int
类型,因此weight/166
是整数除法,它会截断任何小数部分。将结果赋给float类型的变量的事实是无关紧要的。
您希望执行浮点除法,您可以通过确保至少有一个操作数具有浮点类型来完成浮点除法。最简单的方法之一是
float fee = weight / 166.0;
答案 2 :(得分:3)
尝试:
float fee = (float)weight/166.0;
否则执行整数除法,然后转换为浮动。
答案 3 :(得分:3)
float fee = weight/166;
166
为int
,wight
为int
。 int
除以另一个int
将始终生成int
,并且仅当结果存储在fee
时,才会将其投放到float
。
您可以通过
修复它float fee = (float)weight/166;
或
float fee = weight/166.0;
答案 4 :(得分:2)
在此行weight
和166
将被划分为整数,然后转换为float
。
float fee = weight/166; // integer division
您需要将其中一个转换或定义为float,以便进行更准确的划分。例如
float fee = weight/166.0; // double precision division
或
float fee = (float) weight/166; // single precision division (float)
或者如果你想让你的同事感到惊讶:
float fee = weight/166.0f; // single precision division (float)
答案 5 :(得分:2)
那是因为将整数除以整数会得到一个整数,这就是weight/166
的作用。它后来被浮点覆盖,但那“太晚了”。
在您的情况下进行浮点除法的最明确方法是:
(float)weight / 166.0f
答案 6 :(得分:1)
这应该解决它。
float fee = weight/166.0;