用多个数字计算百分比并转换为长数

时间:2014-05-06 12:21:23

标签: java

我有一个要求,我有4个浮动变量代表百分比,总和是100.我需要将浮动变量转换成长,LONG百分比的总和应该是100。

如果我执行以下操作

long longPercentage1 = (long) (floatPercentage1 + 0.5);
long longPercentage2 = (long) (floatPercentage2 + 0.5);
long longPercentage3 = (long) (floatPercentage3 + 0.5);
long longPercentage4 = (long) (floatPercentage4 + 0.5);

它大部分时间都有效。但是如果floatPercentages如下所示:

95.95 - > 96

1.36 - > 1

1.35 - > 1

1.34 - > 1

在上述情况下,总数达到96 + 1 + 1 + 1 = 99。

现在,在以下一组浮点值中,总数达到101。 98.2 - > 98

0.61 - > 1

0.60 - > 1

0.59 - > 1

真的很感激,如果有人能提供一个好的解决方案。

2 个答案:

答案 0 :(得分:1)

没有公式可以只应用于每个百分比,将它们转换为long并始终以100结尾。但您可以决定调整哪个变量以确保总是达到100当你把它们加在一起时:

long longPercentage1 = (long) (floatPercentage1 + 0.5);
long longPercentage2 = (long) (floatPercentage2 + 0.5);
long longPercentage3 = (long) (floatPercentage3 + 0.5);
long longPercentage4 = 100 - longPercentage1 - longPercentage2 - longPercentage3;

(我采用longPercentage4来弥补差异,但您可以选择四个百分比中的任何一个,或者甚至随机改变哪一个将构成差异)

答案 1 :(得分:0)

我的技术主管提出了以下方法,我认为这是最好的解决方案。

  1. 执行计算而不进行舍入(即不添加0.5) - 但也计算余数。
  2. 订购剩余部分(与哪些值相关联)。
  3. 然后,对于从总数(没有舍入)到100的每个%点,取最大余数的值并加1 - 然后从余数列表中删除该值。重复,直到达到100。