金额分摊

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}
上一篇 下一篇

猜你喜欢

热点阅读