今天在 v2ex 上看到一个帖子,问:程序中 100 元钱, 3 人 aa 收款应该怎么分配金额最合理?感觉很有收益,因此总结记录在此。
微信的逻辑是三个人都是 33.34 一共收 100.02。
支付宝的逻辑是发起人33.32,其余两人33.34。
这可以说是两种最典型且久经考验的解决办法了。我们在开发过程中根据实际情况选择其中一种就可以了。支付宝的解决办法更有格局,微信的解决办法更能创收。
网友:lyxxxh2 给出了一个基于 php 实现的伪平均分钱的算法,也可以借鉴一下:
function equallyMoney($money,$weight_maps):array
{
$total_weight = array_sum($weight_maps);
$res = [];
$precision = 2;
foreach ($weight_maps as $key => $weight){
$res[$key] = bcdiv(bcmul($money,$weight,$precision),$total_weight,$precision);
$money = bcsub($money,$res[$key],$precision);
$total_weight = bcsub($total_weight,$weight,$precision);
}
return $res;
}
运行:
equallyMoney(20,[0 => 1, 1 => 1, 2 => 1]);
返回:
array(3) { [0]=> string(4) "6.66" [1]=> string(4) "6.67" [2]=> string(4) "6.67" }





