前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何生成微信红包金额?

如何生成微信红包金额?

作者头像
wangxl
发布2018-03-08 15:40:08
4K1
发布2018-03-08 15:40:08
举报
文章被收录于专栏:PHP在线PHP在线

一些前提解释

我要讨论的红包是:微信拼手气红包。

拼手机红包的一些的限制条件如下: – 每个红包最小为0.01元,所以每个红包至少要分到0.01元。

输入数据:

  1. 红包总金额 amount
  2. 红包个数 count 如果 amount / count < 0.01 元,报错:单个红包金额不可低于0.01元,请重新填写金额。

输出数据:

一个数组:数组中包括 count 个红包金额(每个金额都大于等于0.01元,所有红包的金额加起来等于总金额 amount)

一个重要问题

首先我们先确定一个重要的问题:每个红包的金额是先生成好还是在边抽边生成?

为了解决高并发过程中锁的问题,明显先生成每个红包的金额更简单更效率。

我的思路

1

获取随机值

假设 100 块钱,要发10个拼手气红包。

从1—100 随机10个数字。[20, 61, 97, 39 ,32, 48, 10, 20, 48, 78]

2

计算红包金额

好像已经差不多答案了。。

但是有几个问题需要考虑:

  1. 精度为0.01元,金额不能出现 4.415011
  2. 如果算出来的红包金额小于0.01元,怎么办?

解决办法:

  1. 所有的红包金额需要 floor (舍掉多余的小数位) : 比如 a1 的金额 从 4.415011 –> 4.41,最后一个红包 = 红包总金额 – 已经 floor 的红包的和
  2. 不管是否小于0.01,先把每个红包的金额计算出来。发现自己 = 0 ,从下一个红包中拿0.01,发现自己 = – 0.01 ,从下一个红包中拿 0.02, 直到所有的红包都 > 0

可能还有的问题:

  1. 如何避免出现100块的红包分给11个人,分成了99块+ 0.1 * 10个情况,不知道现在的微信红包是否可能出现这个问题,这个问题李业(我同事)的做法是使用上面的结果做一个正态分布的换算,非常好的想法。
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-05-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 php 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一些前提解释
  • 一个重要问题
  • 我的思路
    • 但是有几个问题需要考虑:
      • 可能还有的问题:
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档