我有以下值:

i->fitness = 160

sum_fitness = 826135

我做手术:

i->roulette = (int)(((i->fitness / sum_fitness)*100000) + 0.5);

但是我一直在0中得到i->roulette

我还尝试将i->fitness / sum_fitness保存在double变量中,然后才应用其他操作,但这也得到了0

我认为这是因为160/826135这么小的数字,然后将其四舍五入为0

我该如何克服呢?

谢谢

编辑:

谢谢大家,我最终做到了:

double temp = (double)(i->fitness);
i->roulette = (int)(((temp / sum_fitness)*100000) + 0.5);


而且有效。

所有答案都是相似的,因此很难选择一个。

最佳答案

你行

i->roulette = (int)(((i->fitness / sum_fitness)*100000) + 0.5);


将值强制转换为int,这就是为什么任何float操作都会被截断的原因
尝试

i->roulette = (((i->fitness / sum_fitness)*100000) + 0.5);


并确保'sum_fitness'或'i-> fitness'为浮点或双精度类型,以使除法成为浮点除法-如果不是,则需要在除法之前强制转换其中之一

i->roulette = (((i->fitness / (double)sum_fitness)*100000) + 0.5);


如果要将其作为整数计算,也可以尝试更改除法和乘法的顺序,例如

i->roulette = ( i->fitness *100000) / sum_fitness;


只要您没有任何整数溢出,这种方法就可以工作,在这种情况下,只有在适用风险大于2000000时才会发生。

关于c++ - 少数取整为零,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22971548/

10-10 07:17