金额分摊

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}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。