gpt4 book ai didi

c++ - 小数四舍五入为零

转载 作者:行者123 更新时间:2023-11-27 23:06:57 26 4
gpt4 key购买 nike

我有以下值:

i->适应度 = 160

sum_fitness = 826135

我做手术:

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

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

我还尝试将 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' 是 float 或 double 类型以使除法成为浮点除法——如果它们不是,则需要在除法之前转换其中之一, 像这样

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com