订单优惠均摊算法

订单优惠金额均摊算法

场景

**订单**使用优惠金额**下放****订单明细**由于小数原因分配不完整

适用条件

商品精度至小数点后两位

示例

	1.商品原价1元
	2.总共3件商品
	3.合计金额3元
	4.使用1张1元优惠券
	5.金额等比分配到每一件商品

解决的问题

	由于小数精度问题导致金额分配不完全

正常思路

	订单总金额为				a
	订单明细金额为			b1,b2,b3....
							a=b1+b2+...
	订单使用总优惠券金额为		c
	订单明细使用优惠券金额为	d1,d2,d3...
							c=d1+d2...
							
	正常算法为
	明细金额占比为 			b1/a
	优惠券分摊金额为			d1=a*(b1/a)

带入示例订单金额

	d1=(1/3)无限循环的小数导致订单明细优惠金额与优惠金额有出入

解决思路

	d1=a*(b1/a)
	d1 末位小数0舍1进
	例如	0.11 ->0.12
			0.10->0.10
	d2=(c-d1)*(b2/(a-b1))
	d2 末位小数0舍1进
	依次类推...

代码

/**
     *
     * @author: cy
     * @Description: 优惠金额分配算法
     * @date 2020-10-13
     * @Param list:明细金额集合
     * @Param couponMoney: 优惠金额 
     * @return: void
     */
public static void sf(List<BigDecimal> list, BigDecimal couponMoney) {
   
        //明细总和
        BigDecimal
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值