如何生成微信红包金额?

一些前提解释

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

拼手机红包的一些的限制条件如下: – 每个红包最小为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

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大数据挖掘DT机器学习

时间序列预测全攻略(附带Python代码)

原文作者:AARSHAY JAIN 36大数据翻译,http://www.36dsj.com/archives/43811 时间序列(简称TS)被认为是分...

1.7K7
来自专栏Winter漫聊技术

随机机制的探索(RandomPicker中文文档)

RandomPicker?? 最初的灵感来来自音乐随机播放: 权重++ 切歌模式

892
来自专栏AI启蒙研究院

The Polar Code, an Alternative Perspective

802
来自专栏小尘哥的专栏

能买几颗糖??

Q:又来买糖,兜里装了一块零一分,即(¥1.01),,糖果也涨价了,变成0.56元一个,问买一个之后兜里还剩多少钱?

992
来自专栏海天一树

AtCoder算法竞技平台简介

AtCoder是日本最大的算法竞技网站,域名为http://atcoder.jp/(注意http://www.atcoder.jp/ 是其官网)。AtCoder...

1192
来自专栏机器之心

一文读懂遗传算法工作原理(附Python实现)

3255
来自专栏算法+

MTCNN人脸检测 附完整C++代码

Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Neura...

2.3K5
来自专栏有趣的Python

TensorFlow应用实战-6-AI作曲环境搭建读作sharp,是音乐里的升音符号,在sharp前面的这个音去升高一个半音。

用TensorFlow开发会作曲的AI 背景和知识点介绍 人工智能的不断火热。 Google的Magenta(洋红色)项目 ? mark https://mag...

4879
来自专栏大数据智能实战

基于seq2seq的中国对联自动配对技术实践

Sequence to Sequence模型这种基于编码--解码的模型已经被谷歌成功应用于机器翻译上。而理论上任意的序列到序列的有监督问题都可以用这种模型。如...

3078
来自专栏SDNLAB

5G革命的技术,一个都不能少

第五代移动网络简称5G是产业界即将实现的移动技术革命,是LTE-A网络的深层演进技术。5G网络中的关键技术包括MIMO、OFDM、SC-FDMA等。 超密集微型...

42212

扫码关注云+社区