我有以下值: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/