有问题的代码:
std::stringstream cd;
int f = int((15 / allyCounter) * 100);
cd << f;
allyCounter等于45.想法是获得allyCounter的15%,其中allyCounter是一个不断变化的动态int。我没有多少c ++经验,所以我确定我所缺少的是一些基本的东西。
答案 0 :(得分:2)
这里的问题几乎可以肯定是整数与浮点数学。
15/45(在整数运算中完成时)为0。
尝试
std::stringstream cd;
int f = int((15.0 / allyCounter) * 100);
cd << f;
......看看事情是不是更好。 15.0是一个双精度浮点常数,所以它会强制数学以浮点而不是整数来完成,所以你得到一个百分比。
另一种可能性是在分裂之前进行乘法运算:
int f = 1500 / allyCounter;
如果分子是变量,这可能会导致分子溢出的问题,但在这种情况下,我们知道它是一个不能溢出的值。
答案 1 :(得分:0)
在C ++中,15 / 45
为0
。 (它被称为“整数除法”:在C ++中划分两个int
的结果也是int
,因此真正的答案被截断,而15 / 45
是0
。)
如果这是你的问题,那么在进行除法之前,只需将其加倍:
int f = static_cast<double>(15) / allyCounter * 100;
甚至:
int f = 15. / allyCounter * 100;
(.
中的15.
会导致它成为双倍。)
答案 2 :(得分:0)
您正在使用整数除法:
std::stringstream cd;
int f = int((15.0 / allyCounter) * 100);
cd << f;
编译器看到15/allyCounter
并认为它应该返回一个整数(你传递了两个整数,对吧?)。 15/150 == 0
整数除法,你总是四舍五入。在这种情况下,编译器将15.0
视为double,并使用小数位。