总百分比不正确

时间:2016-07-25 11:48:59

标签: java math rounding

我正在分发令牌,但它们并非全部分发。我有多个百分比,并获得给予该百分比的代币数量,但它们不等于总数。

示例:

for(double d : percentages){
    double rounded = Math.round(d * 100); 
    int amount = (int) (tokens * (rounded / 100));
    total += amount;
}

总数是47。我也尝试用Math.round

来围绕它
{{1}}

总数为49

我似乎永远不会得到50,它总是低于或高于。我想尽可能均匀地分发这些令牌。如果你能帮忙请做!

3 个答案:

答案 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的年龄,但它仍然最后一次运行。所以你必须撤销退休率。