电商营销活动的优惠金额精度问题

在这里插入图片描述

1 问题背景

电商为了提高销量,常常会做一些优惠活动,吸引顾客购买。优惠活动的优惠金额会存在精度问题。比如,购买A商品3件、B商品5件、C商品7件,享受满额打折、满件减价、满额赠送等等的优惠活动。那么生单的时候需要记录A商品的优惠金额、B商品的优惠金额、C商品的优惠金额,整个订单的总优惠金额。此时每种商品的优惠金额加起来是否等于总的优惠金额呢?如果不相等要怎么处理?

2 前言

本博客是笔者在真实的生产环境上遇到的问题,非本地虚拟机搭建的demo或者自学的demo,博客仅供自己总结参考,如有不正确的地方请指出。

3 子优惠金额的累加值与总优惠金额不相等的影响

为方便阐述,假设累加所有商品的优惠金额的值为a,总优惠金额为b,商品总售价为c,运费为d,税费为e,订单总实付为f。

  • 第三方物流平台或者仓储平台或bi平台,会校验a是否等于b,如果不相等,则会令这些第三方平台有异常。

  • 某些支付业务的公司,如Paypal,也会校验a是否等于b,或者校验 f 是否等于 c - a + d + e ,如果不相等会导致订单支付失败。

4 如何解决

4.1 思想

针对每种优惠活动,先计算总的优惠(必须显式进行小数点后几位的保留,如果数据库的字段要求保留2为小数,那么java代码就显示保留2位小数),然后再分摊优惠金额到每个商品(同样要显式进行小数点后几位的保留),最后一个商品要用 总的优惠金额 - 已分摊出去的金额。将每种优惠活动的总优惠累加起来就是整个订单的总优惠金额。

总结就是先算总的再进行分摊,最后一个商品用减法,订单总优惠等于所有优惠活动总的优惠金额累加起来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值