我正在分发令牌,但它们并非全部分发。我有多个百分比,并获得给予该百分比的代币数量,但它们不等于总数。
示例:
for(double d : percentages){
double rounded = Math.round(d * 100);
int amount = (int) (tokens * (rounded / 100));
total += amount;
}
总数是47。我也尝试用Math.round
来围绕它{{1}}
总数为49
我似乎永远不会得到50,它总是低于或高于。我想尽可能均匀地分发这些令牌。如果你能帮忙请做!
答案 0 :(得分:2)
使用double
total
。使用int会导致丢失小数信息
double total = 0;
for(double d : percentages){
double amount = (tokens * d);
total += amount;
}
答案 1 :(得分:1)
你应该做的是将你原来的百分比向下舍入(转换为int)。然后看看你遗留了多少令牌。这些应该分发给距离其真实价值最远的案例。
在每种情况下,错误都是:
double error = (percentage * tokens) - (int)(percentage * tokens);
按错误对案例进行排序,并将令牌奖励给具有最大错误的案例,直到您发出全部错误为止。
答案 2 :(得分:0)
我不确定为什么会这样,但我将总代码更改为
total += income/1.025;
我认为它有效,因为虽然循环没有显示68的年龄,但它仍然最后一次运行。所以你必须撤销退休率。