金额分摊
2020-08-31 本文已影响0人
花钱约下
def get_price_percent_avg_of_amount(price_list, amount):
"""
根据金额占比金额分摊金额
A = 5 * 2
B = 25 * 2
C = 10 * 1
:param price_list: [
{
"id": 123,
"price": 5,
"count": 2
},
{
"id": 124,
"price": 25,
"count": 2
},
{
"id": 125,
"price": 10,
"count": 1
},
]
:param amount: 33
:return:
"""
avg_price_map = {}
price_total = sum([x.get('price') * x.get('count') for x in price_list])
current_app.logger.info(u'price_total:{}, amount:{}'.format(price_total, amount))
for p in price_list:
_price = p['price'] * p['count']
percent = _price / float(price_total)
percent = 1 - percent
avg_price = amount - (amount * percent)
p_avg_price = accurate_round(avg_price / p['count'])
avg_price_map[p['id']] = p_avg_price
price_total -= _price
amount -= p_avg_price * p['count']
current_app.logger.info(u'price:{}, amount:{}'.format(price_total, amount))
return avg_price_map
# 金额分摊输出
amont = 10
price_list = [
{
"id": 123,
"price": 5,
"count": 2
},
{
"id": 124,
"price": 25,
"count": 2
},
{
"id": 125,
"price": 10,
"count": 1
},
]
print get_price_percent_avg_of_amount(price_list, amount) # {123: 0.71, 124: 3.58, 125: 1.42}