2012-06-12

[Javascript]除法演算法

把一筆錢依比例分給幾個人的時候,當遇到除不盡時,就必須再特別判斷處理,很不方便。
例如100元平分給三個人,每人33元後,最後的1元要發給其中之一的人,變成一人34, 兩人33的分配結果。​​​​​​​​​​​​
某天在網路上找到一篇不錯的演算法,可以交給它幫你分配好。 如下所示:(可到我的JSFIDDLE線上測試~)
//先設定權重
var factor = [ 1, 1, 1 ], factorSum = 0;

//100萬元要依比例分給3個人(四拾五入計算到元)
var totalAmount = 1000000, amount = [];

//三個人勢均力敵,100萬除以3會有餘1元的問題, 且看以下的邏輯演法, 會自然分配好
for (var i = 0; i < factor.length; i++) 
{
    factorSum += factor[i];
}

var r = "";
for (var i = 0; i < factor.length; i++)
{
    amount[i] = parseInt(Math.round(totalAmount * factor[i] / factorSum))
    r += totalAmount + " * " + factor[i] + " / " + factorSum + " = " + amount[i] + "\n";
    totalAmount -= amount[i];
    factorSum -= factor[i];
}

alert(r);​

沒有留言:

張貼留言