亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使四舍五入的百分比加起來等于100%

如何使四舍五入的百分比加起來等于100%

12345678_0001 2019-10-15 09:14:35
考慮以下四個百分比,以float數字表示:    13.626332%    47.989636%     9.596008%    28.788024%   -----------   100.000000%我需要將這些百分比表示為整數。如果僅使用Math.round(),我最終將占101%。14 + 48 + 10 + 29 = 101如果使用parseInt(),我最終將獲得97%的收益。13 + 47 + 9 + 28 = 97有什么好的算法可以將任意數量的百分比表示為整數,而總數量仍保持100%?編輯:在閱讀了一些評論和答案之后,顯然有很多方法可以解決此問題。在我看來,為了忠于數字,“正確”的結果是使總誤差最小化,該誤差由相對于實際值引入的誤差舍入多少來定義:        value  rounded     error               decision   ----------------------------------------------------    13.626332       14      2.7%          round up (14)    47.989636       48      0.0%          round up (48)     9.596008       10      4.0%    don't round up  (9)    28.788024       29      2.7%          round up (29)在平局(3.33、3.33、3.33)的情況下,可以做出任意決定(例如3、4、3)。
查看完整描述

3 回答

?
開滿天機

TA貢獻1786條經驗 獲得超13個贊

由于這里的答案似乎都無法正確解決,因此這是我使用underscorejs的半混淆版本:


function foo(l, target) {

    var off = target - _.reduce(l, function(acc, x) { return acc + Math.round(x) }, 0);

    return _.chain(l).

            sortBy(function(x) { return Math.round(x) - x }).

            map(function(x, i) { return Math.round(x) + (off > i) - (i >= (l.length + off)) }).

            value();

}


foo([13.626332, 47.989636, 9.596008, 28.788024], 100) // => [48, 29, 14, 9]

foo([16.666, 16.666, 16.666, 16.666, 16.666, 16.666], 100) // => [17, 17, 17, 17, 16, 16]

foo([33.333, 33.333, 33.333], 100) // => [34, 33, 33]

foo([33.3, 33.3, 33.3, 0.1], 100) // => [34, 33, 33, 0]


查看完整回答
反對 回復 2019-10-15
?
守候你守候我

TA貢獻1802條經驗 獲得超10個贊

只要您不擔心依賴原始十進制數據,有許多方法可以做到這一點。


第一種,也許是最受歡迎的方法是最大剩余法


基本上是:


四舍五入

求和與100之差

通過以小數部分的降序向項目加1來分配差異

在您的情況下,它將如下所示:


13.626332%

47.989636%

 9.596008%

28.788024%

如果取整數部分,則得到


13

47

 9

28

總計為97,而您想再添加三個?,F在,您看一下小數部分,它們是


.626332%

.989636%

.596008%

.788024%

并選擇最大的,直到總數達到100。這樣您將獲得:


14

48

 9

29

另外,您可以選擇顯示小數點后一位而不是整數。因此,數字將是48.3和23.9等。這將使方差從100下降很多。


查看完整回答
反對 回復 2019-10-15
?
拉莫斯之舞

TA貢獻1820條經驗 獲得超10個贊

做到這一點的“最佳”方法可能是保持您所在位置的連續(非整體)統計并舍入該值,然后將其與歷史記錄一起使用以確定應該使用什么值。例如,使用您提供的值:


Value      CumulValue  CumulRounded  PrevBaseline  Need

---------  ----------  ------------  ------------  ----

                                  0

13.626332   13.626332            14             0    14 ( 14 -  0)

47.989636   61.615968            62            14    48 ( 62 - 14)

 9.596008   71.211976            71            62     9 ( 71 - 62)

28.788024  100.000000           100            71    29 (100 - 71)

                                                    ---

                                                    100

在每個階段,您都不會對數字本身進行四舍五入。取而代之的是,您對累計值進行四舍五入,并計算出從上一個基線達到該值的最佳整數-該基線是前一行的累積值(四舍五入)。


之所以可行,是因為您不會在每個階段都丟失信息,而是更智能地使用信息。“正確”的四舍五入值在最后一列中,您可以看到它們的總和為100。


查看完整回答
反對 回復 2019-10-15
  • 3 回答
  • 0 關注
  • 4250 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號