我在一个程序中有以下内容(一个更大的函数的一部分,但这是相关的测试位):
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.
任何人都可以告诉我这里我缺少什么吗?
非常感谢。 :)
答案 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”,测试);