2014-05-06 124 views
0

我有一個要求,其中有4個浮動變量表示百分比,總和爲100.我需要將浮動浮點數轉換爲long,並將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

真的很感謝任何人都可以提供一個很好的解決方案。

+0

將它們轉換成'double'而不是'long'。 – tod

+2

真的沒有解決方案。如果某些百分比小於1,除了將它們舍入爲1或0以外,您實在別無選擇。總會有舍入誤差。 –

回答

0

我的技術主管建議以下方法,我覺得它是最好的解決方案。

  1. 在不捨入的情況下進行計算(即不加0.5) - 也計算餘數。
  2. 排序剩餘(與關聯值)。
  3. 然後,對於從總數(未舍入)到100的每個百分點取最大剩餘的值並加1 - 然後從剩餘列表中刪除該值。重複,直到達到100。
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來補足差額,但你可以選擇任何四個百分比,或者甚至是隨機變化的其中一個將補差價)

+0

這將確保總數爲100.但是,這可能導致值1.01四捨五入爲2. – Koottan

+1

沒錯。唯一的解決辦法是做出妥協。 –