商城订单使用优惠卷价格计算逻辑,举例计算
参考文档
代码应用时注意:
计算最后一个满减时,我们四舍五入,肯定会大于或小于最终满减金额。因此最后一个商品满减金额的算法为:总满减金额 - 前面所有商品满减的金额 = 最后一个商品满减金额
例1
一个商品,买了4件,单件价格50元;用了优惠卷满199-100;要退2个,求各商品实际支付价格和退款价格;
1、计算商品总价,是否满足使用优惠卷50*4=200; //满足2、计算使用优惠卷后的实际应付金额200-100=100;3、优惠卷满减的金额,应该按照商品价格分摊到各个商品(1)、得到每实际支付1元分摊的优惠金额公式1:满减金额 / 订单参与满减的总金额 = 每实际支付1元分摊的优惠金额100 / 200 = 0.5;(2)、使用每1元分摊的优惠金额,计算出各个订单所分摊的优惠卷金额公式2:每实际支付1元分摊的优惠金额 * 单个订单的成交价 = 单个订单分摊的优惠卷金额0.5 * 50 = 25;公式3:单个订单分摊的优惠卷金额 * 购买数量 = 优惠卷满减金额25 * 4 = 100;公式4:商品价格 - 公式2求出的单个订单分摊的优惠卷金额 = 各商品实际支付金额50 - 25 = 25;计算完成,进行验证,验证都成功即计算成功。1、优惠满减金额与公式3求出的满减金额是否正确 // true2、公式3求出的满减金额 + 序号2里的实际应付金额是否等于商品总价 // true3、各商品实际支付金额 * 购买数量 是否等于 商品总价 - 使用优惠卷后的金额x = 25 * 4 = 100元; y = 200 - 100 = 100元;x === y; // true答:1、各商品实际支付价格25元:见公式4;2、退款价格50元:各商品实际支付金额 * 退款数量 = 退款价格25 * 2 = 50;
例2
多个商品,商品a买了5件,价格为10元一件。商品b买了1个,价格为25一件。商品c买了3个,价格为15元件;用了优惠卷买99-40;需要退款:商品a退3个,b跟c全退
1、计算商品总价,是否满足使用优惠卷(10*5)+(25*1)+(15*3)=120; //满足2、计算使用优惠卷后的实际应付金额120-40=80;3、优惠卷满减的金额,应该按照商品价格分摊到各个商品(1)、得到每实际支付1元分摊的优惠金额公式1:满减金额 / 订单参与满减的总金额 = 每实际支付1元分摊的优惠金额40 / 120 = 0.3333333333333333;(2)、使用每1元分摊的优惠金额,计算出各个订单所分摊的优惠卷金额公式2:每实际支付1元分摊的优惠金额 * 单个订单的成交价 = 单个订单分摊的优惠卷金额商品a:0.3333333333333333 * 10 = 3.333333333333333;商品b:0.3333333333333333 * 25 = 8.333333333333332;商品c:0.3333333333333333 * 15 = 5;公式3:单个订单分摊的优惠卷金额 * 购买数量 = 优惠卷满减金额商品a:3.333333333333333 * 5 = 16.666666666666664;商品b:8.333333333333332 * 1 = 8.333333333333332;商品c:5 * 3 = 15;多商品需要相加:16.666666666666664 + 8.333333333333332 + 15 = 40元公式4:商品价格 - 公式2求出的单个订单分摊的优惠卷金额 = 各商品实际支付金额商品a:10 - 3.333333333333333 = 6.666666666666667元;商品b:25 - 8.333333333333332 = 16.666666666666668元;商品c:15 - 5 = 10元;计算完成,进行验证,验证都成功即计算成功。1、优惠满减金额与公式3求出的满减金额是否正确 // true2、公式3求出的满减金额 + 序号2里的实际应付金额是否等于商品总价 // true3、各商品实际支付金额 * 购买数量 是否等于 商品总价 - 使用优惠卷后的金额x = (6.666666666666667*5) + (16.666666666666668*1) + (10*3) = 80元; y = 120 - 40 = 80元;x === y; // true答:退款价格66.66666666666667元:各商品实际支付金额 * 退款数量 = 退款价格(6.666666666666667*3) + (16.666666666666668*1) + (10*3) = 66.66666666666667元
例3
多个商品,商品a买了2件,价格为99.99元一件。商品b买了1个,价格为69.3一件。商品c买了1个,价格为169元件;用了优惠卷买300-50;需要退款:各退一个
1、计算商品总价,是否满足使用优惠卷(99.99*2)+(69.3*1)+(169*1)=438.28; //满足2、计算使用优惠卷后的实际应付金额438.28-50=388.28;3、优惠卷满减的金额,应该按照商品价格分摊到各个商品(1)、得到每实际支付1元分摊的优惠金额公式1:满减金额 / 订单参与满减的总金额 = 每实际支付1元分摊的优惠金额50 / 438.28 = 0.11408232180341335;(2)、使用每1元分摊的优惠金额,计算出各个订单所分摊的优惠卷金额公式2:每实际支付1元分摊的优惠金额 * 单个订单的成交价 = 单个订单分摊的优惠卷金额商品a:0.11408232180341335 * 99.99 = 11.407091357123301;商品b:0.11408232180341335 * 69.3 = 7.9059049009765445;商品c:0.11408232180341335 * 169 = 19.279912384776857;公式3:单个订单分摊的优惠卷金额 * 购买数量 = 优惠卷满减金额商品a:11.407091357123301 * 2 = 22.814182714246602;商品b:7.9059049009765445 * 1 = 7.9059049009765445;商品c:19.279912384776857 * 1 = 19.279912384776857;多商品需要相加:22.814182714246602 + 7.9059049009765445 + 19.279912384776857 = 50元公式4:商品价格 - 公式2求出的单个订单分摊的优惠卷金额 = 各商品实际支付金额商品a:99.99 - 11.407091357123301 = 88.58290864287669元;商品b:69.3 - 7.9059049009765445 = 61.39409509902345元;商品c:169 - 19.279912384776857 = 149.72008761522315元;计算完成,进行验证,验证都成功即计算成功。1、优惠满减金额与公式3求出的满减金额是否正确 // true2、公式3求出的满减金额 + 序号2里的实际应付金额是否等于商品总价 // true3、各商品实际支付金额 * 购买数量 是否等于 商品总价 - 使用优惠卷后的金额x = (88.58290864287669*2) + (61.39409509902345*1) + (149.72008761522315*1) = 388.28元; y = 438.28 - 52 = 388.28元;x === y; // true答:退款价格66.66666666666667元:各商品实际支付金额 * 退款数量 = 退款价格(88.58290864287669*1) + (61.39409509902345*1) + (149.72008761522315*1) = 299.6970913571233元
例4(简单版)
一个商品,商品a5个,价格55;用了优惠卷买99-40;
1、计算商品总价,是否满足使用优惠卷(55*5)=275; //满足2、计算使用优惠卷后的实际应付金额275-40=235;3、优惠卷满减的金额,应该按照商品价格分摊到各个商品(1)、得到每实际支付1元分摊的优惠金额公式1:满减金额 / 订单参与满减的总金额 = 每实际支付1元分摊的优惠金额40 / 275 = 0.14545454545454545;(2)、使用每1元分摊的优惠金额,计算出各个订单所分摊的优惠卷金额公式2:每实际支付1元分摊的优惠金额 * 单个订单的成交价 = 单个订单分摊的优惠卷金额商品a:0.14545454545454545 * 55 = 8;公式3:单个订单分摊的优惠卷金额 * 购买数量 = 优惠卷满减金额商品a:8 * 5 = 40;公式4:商品价格 - 公式2求出的单个订单分摊的优惠卷金额 = 各商品实际支付金额商品a:55 - 8 = 47元;计算完成,进行验证,验证都成功即计算成功。1、优惠满减金额与公式3求出的满减金额是否正确 // true2、公式3求出的满减金额 + 序号2里的实际应付金额是否等于商品总价 // true3、各商品实际支付金额 * 购买数量 是否等于 商品总价 - 使用优惠卷后的金额47 * 5 === 275 - 40; // true
商城订单使用优惠卷价格计算逻辑,举例计算相关推荐
- 如何设计一个优惠卷系统
如何设计一个优惠卷系统 场景 优惠券的种类 优惠券系统的核心流程 发券 领券 用券 需求拆解 商家侧 用户侧 编码 Service 服务 服务结构设计 优惠券系统设计技术难点 Storage存储 表单 ...
- 商城订单中心实现及用户关单实现思路
商城订单中心实现及用户关单实现思路 一.订单服务 1.1.订单中心 1.2.订单构成 1.3.订单状态 1.4.订单流程 1.5.订单幂等性处理 1.6.订单业务流程 二.关单方式 2.1.Rabbi ...
- 谷粒商城--订单服务--高级篇笔记十一
1.页面环境搭建 1.1 静态资源导入nginx 等待付款 --------->detail 订单页 --------->list 结算页 --------->confirm 收银页 ...
- 【Redis】实战篇:优惠卷秒杀 (库存超卖问题、一人一单问题)
文章目录 3.1 全局唯一ID 3.2 -Redis实现全局唯一Id 3.3 添加优惠卷 3.4 实现秒杀下单 3.5 库存超卖问题分析 3.6 乐观锁解决超卖问题 3.7 优惠券秒杀-一人一单 3. ...
- 大多数人不知道淘宝天猫有内部优惠卷,能省钱的公众号,购物省钱妙招
一.什么是内部券? 手淘中商家都会给出隐藏优惠券的,优惠券的额度折扣80%都有,买家平时不去查询该商品是否有优惠券.不会用优惠券抵扣,那就多花了不少钱 经常购物的人,就知道如果长期使用优惠券.可以省出 ...
- 昊海微信拼团php,最新微信昊海拼团系统独立版源码分享,微信团购关注送红包送优惠卷功能,附说明文档...
本帖最后由 柯妮妮 于 2016-4-6 11:43 编辑" ?; G0 s% a/ I* T& i , ?% f% {) S; i7 @1 Z4 N 最新微信拼团系统独立版完整源码 ...
- Redis实现全局唯一id,实现优惠卷秒杀的下单功能
Redis实现全局唯一id public class RedisIdWorker {private StringRedisTemplate stringRedisTemplate;public Red ...
- 黑马点评--优惠卷秒杀
黑马点评–优惠卷秒杀 全局ID生成器: 是一种在分布式系统下用来生成全局唯一ID的工具,一般要满足下列特性: 为了增加ID的安全性,我们可以不直接使用Redis自增的数值,而是拼接一些其它信息: Re ...
- html简单组件(九):简洁的商城订单列表显示(带状态)
html简单组件(九):简洁的商城订单列表显示(带状态) 效果图为: HTML代码 <div class="textDiv"><div class="h ...
最新文章
- 在虚幻引擎5中重塑火箭联盟——口袋联盟
- 在javascript中判断类型
- 鸢尾花分类_机器学习:鸢尾花数据集--贝叶斯分类
- MySQL—相关子查询
- 笔记-信息系统开发基础-信息系统规划方法-大型新信息系统特征/企业系统规划步骤...
- Win7图片查看器打印不了图片怎么办
- CMake使用详解二(多文件编译)
- 另5个你不知道的HTML5接口API
- 《程序设计技术》第六章例程
- 子类调用父类的构造函数几种情况
- 有趣的东西:Test () () () () () () () () () ();
- SQL语法提示工具SQL Prompt教程——控制代码建议框何时弹出
- Java 编码规范11(安全规约)
- 股票指标matlab函数,股票函数,通达信编程3000例
- linux 拷贝xlsx_linux 命令行将xlsx格式文件转换成CSV的5种方法
- grub通过img文件启动linux,通过grub4dos引导本地linux系统
- 计算机如何提高开机速度?
- 【转】提高MATLAB运行效率
- 你还不了解的OKRs-E是什么?
- python用图片浏览器打开图片
热门文章
- macos从10.12.6升级到10.15.7 svn无法使用
- 《微信小程序跳转页面安卓闪现两次》
- python关于通讯录模型_python写一个通讯录 - wtwexile - 博客园
- c++ 报错 exponent has no digits
- DX9光照效果-------VB6编程学习DX9游戏编程DirectX9编程2D小游戏源码冷风引擎CoolWind2D游戏引擎(12)
- FindPic 找图
- Matlab的filtfilt函数解析与C++实现
- ArcMap实现CAD图的空间配准
- java地图完整项目-地图找房(基于百度地图-MongoDB)
- 字体下载大宝库:30款好看的免费英文字体