double cost_factor(int num_of_sections, int num_of_students) {
double cost;
cost = 35 * num_of_sections / num_of_students;
printf("Cost = %.2lf\n", cost);
return cost;
}
无论我为num_of_sections和num_of_students输入什么,我都会得到1.00的返回值。 如果我输入11(num_of_sections)和364(num_of_students),我得到1.00,但是它应该是1.06。任何人都可以识别他们的错误吗?
答案 0 :(得分:9)
你正在用整数做数学。所以你会得到整数值。
const = 35 * num_of_sections / num_of_students
即使cost
是双引号,也会给你一个int,因为所有组件都是ints
。
您需要对值进行类型转换以获得double
cont = 35.0 * (double)num_of_sections / (double)num_of_students;
请注意,过度杀戮,足以将等值中的一个值提升为双倍。
cont = 35.0 * num_of_sections / num_of_students;
然后,C将自动为您宣传其他值。
答案 1 :(得分:3)
除以两个整数会返回一个整数,并删除小数部分。试试这个:
cost = 35.0 * num_of_sections / num_of_students;
35.0
是双字面而不是整数字面值。这将导致表达式35.0 * num_of_sections
被评估为double * double
(在计算之前将int
转换为double
,然后分割也将使用两个双打
答案 2 :(得分:2)
问题是要将num_of_students
和num_of_sections
提升一倍,以便正确计算cost
。
double cost(double num_of_students, double num_of_sections)
答案 3 :(得分:1)
查看所有操作:它们都只涉及整数,因此C进行整数运算。最快的解决方法是使35
成为double
,这将导致其他操作数的double
升级(如果操作中的任何操作数为double
另一个是晋升的。)
所以你可以这样做:
cost = ((double)35) * num_of_sections / num_of_students;
或者更好,
cost = 35. * num_of_sections / num_of_students;
(有些人更喜欢35.0
,但35.
末尾的点足以指定它是double
字面值; 35
仅用int
作为{{1}}字面意思