C数学计算无法按预期工作

时间:2009-03-05 19:26:44

标签: c math

我在一个程序中有以下内容(一个更大的函数的一部分,但这是相关的测试位):

int test = 100 + (100 * (9 / 100));
sprintf (buf, "Test: %d\n\r", test);
display_to_pc (buf, player);

基本上相当于:

x = a + (a * (b / 100))

其中a是给定的数字,b是百分比修饰符,x是结果(原始加上原始的百分比)......我希望这是有道理的。

它给了我:

Test: 100

我认为我头脑中的数学可能是错误的,但我在IDE中检查了几个计算器甚至表达式评估器,并且它们都给出了第一个表达式的预期结果109.

任何人都可以告诉我这里我缺少什么吗?

非常感谢。 :)

11 个答案:

答案 0 :(得分:14)

替换

int test = 100 + (100 * (9 / 100));

int test = 100 + (100 * 9 / 100);
// x = a + (a * b / 100)

它将按预期工作。 9 / 100使用整数除法执行;最接近.09的整数是0(而0 * 100仍为0)。

首先进行乘法会产生900 / 100,从而为您提供所期望的9

如果需要超过整数精度,则可能需要使用浮点路径。

答案 1 :(得分:8)

你正在使用整数数学。

9/100 = 0。

100 +(100 *(0)= 100。

您的计算器使用浮点数学,并且可以适当地处理小数。

答案 2 :(得分:4)

正如其他人所指出的那样,问题是你正在做整数算术。您需要通过将变量转换为double或使用double常量来将计算作为浮点运算,然后允许截断为您提供整数部分。

x = a + (a * (b / 100.0));

x = a + (a * ((double)b / 100)));

答案 3 :(得分:3)

int test = 100 +(100 *(9/100));

9/100 = 0

0 * 100 = 0

100 + 0 = 100

答案 4 :(得分:3)

你的错误是9/100被解释为整数除法,并且计算结果为0而不是0.09。

您可以改为编写9 / 100.0,或重新排列表达式。

答案 5 :(得分:2)

您正在使用整数除法,因此9/100为零,因此test = 100 + 0 = 100

答案 6 :(得分:2)

如果您只使用将导致整数值的表达式,请使用Daniel L's的答案。如果您要使用的值不太干净,请使用双重文字而不是整数文字:

int test = 100.0 + (100.0 * (9.0 / 100.0));

答案 7 :(得分:1)

将9/10的答案截断为0,然后将其乘以100,然后将其加100。

答案 8 :(得分:1)

变化:

int test = 100 + (100 * (9 / 100));

int test = (int)(100 + (100 * (9 / 100.0)));

并查看它是否按预期工作。

编辑:哇。我打字的时候有很多答案。他们中的大多数也会奏效。

答案 9 :(得分:1)

您应该使用浮点运算,因此9/100变为0.09。

int test = 100.0 +(100.0 * 9.0 / 100.0);

答案 10 :(得分:0)

您正在为变量类型使用整数,因此最内层表达式(9/100)将导致0.然后下一个表达式将是100 * 0,即0,最后是100 + 0 ......

要获得所需的结果,请尝试使用float:

浮动测试= 100.0 +(100.0 *(9.0 / 100.0));

printf(“结果:%0.2f \ n”,测试);