如何生成微信红包金额?

一些前提解释

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

拼手机红包的一些的限制条件如下: – 每个红包最小为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个情况,不知道现在的微信红包是否可能出现这个问题,这个问题李业(我同事)的做法是使用上面的结果做一个正态分布的换算,非常好的想法。

原文发布于微信公众号 - php(phpdaily)

原文发表时间:2016-05-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

1 条评论
登录 后参与评论

相关文章

来自专栏IT派

我用 Python 爬取微信好友,最后发现一个大秘密

你身处的环境是什么样,你就会成为什么样的人。现在人们日常生活基本上离不开微信,但微信不单单是一个即时通讯软件,微信更像是虚拟的现实世界。你所处的朋友圈是怎么样,...

1234
来自专栏数据处理

考勤数据统计

1573
来自专栏诸葛青云的专栏

在微信好友信息抓取这一块,这才是最好的python分析技巧!

早些日子有人问我我的微信里面有一共多少朋友,我就随后拉倒了通讯录最下面就找到了微信一共有多少位好友。然后他又问我,这里面你认识多少人?

1564
来自专栏数据魔术师

运筹学教学|修正单纯形法(revised simplex algorithm)代码分享及详细注释

欢声笑语中,小编学会了单纯形法,心里还有点小傲骄!!准备晚上去PUBG里面潇洒一把~ ? 然而,老板突然来电话说,单纯形法有升级的版本!需要我赶紧准备一份代码。...

5446
来自专栏数据结构与算法

CF895 E. Eyes Closed(线段树 期望)

612
来自专栏Python小屋

Python回文判断代码优化与6个思考题

送个福利:清华大学出版社和新宝图书专营店联合推出正版特价图书《Python程序设计开发宝典》,原价69元,特价47.6元,详情:https://detail.t...

3096
来自专栏Kurt Niu 的博客

ThoughtWorks 百年不变的面试题之 --- Merchant's Guide To The Galaxy

Code: https://github.com/zifeiniu/Merchants-Guide-To-The-Galaxy

861
来自专栏HTML5学堂

JavaScript基础考核真题——你能全做对吗?

正文 JavaScript基础考核真题——你能全做对吗。刘国利 - 独行冰海 : 每位讲师在授课、管理的同时,还需要不断的涉猎各种知识,提升本职技术。本文章的考...

2836
来自专栏抠抠空间

haslib 模块

一、模块简介 Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等。 什么是摘要算法呢?摘要算法又称哈希算法、散列算法。它通过一个函数,把任...

2998
来自专栏喔家ArchiSelf

一行Python代码

自从08年接触Python,就有爱不释手的感觉,逐渐地,有些不忍地疏远了Perl 和Shell编程,因为python 的优雅么? 不全是,主要是可以高效开发吧。

824

扫码关注云+社区