如何生成微信红包金额?

一些前提解释

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

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

相关文章

来自专栏币德区块链

【深度解读】原来你是这样的PoW机制

共识机制是区块链的灵魂,区块链的发展离不开共识机制。工作量证明系统(Proof Of Work,PoW)机制是第一代的共识机制,发展至今,PoW机制每年将消耗数...

671
来自专栏SAP最佳业务实践

SAP最佳业务实践:FI–自建资产(资本投资订单)(164)-4 KO88在建工程结算

4.6 KO88在建资产结算 与评估相比,不能执行跨会计年度的结算。系统使用过帐期间的最后一天,自动决定过帐期间/会计年度中的过帐日期。结算的处理类型有三种...

3578
来自专栏java工会

如何用JavaScript写一个区块链?

自去年开始,伴随着比特币的火爆,区块链成为比“人工智能”、“共享”还要火的词汇。各大企业,诸如阿里、京东、腾讯、百度等纷纷入局。

470
来自专栏区块链维基

区块链技术学习者终极指南!

什么是加密经济学(cryptoeconomics)?以太坊社区开发者Vlad Zamfir解释道: “这是一门独立的学科,旨在研究去中心化数字经济学中的协议,这...

30310
来自专栏指旺研究院

凃说区块链|看完这些,你就成了区块链大牛!

近些日子笔者阅读了一些关于区块链技术原理的书籍,在这里有几个问题需要澄清一下,也许这些问题你也困惑过,在此我们一起看一看借着这个机会豁然开朗。 1 目前获取比...

2746
来自专栏量化投资与机器学习

【Python量化投资】趋向系统指标策略 ADX、DMI指标用于股票池(附源码)

[什么是ADX] ADX(average directional indicator) 平均趋向指数,常用的趋势衡量指标。通常与趋向系统(DMI)一起使用,利用...

2946
来自专栏陈树义

极简入门:什么是区块链?

前阵子在油管看到了一个介绍区块链的短视频,把区块链讲得很清楚,于是我把它翻译一下分享给大家。相信大家看了这篇文章,基本上能够理解什么是区块链了。

951
来自专栏申龙斌的程序人生

小白能够看懂的12个区块链名词

几天前接到一项任务,要给不懂区块链和比特币的小白解释几个常见概念,任务开工后才发现是一项蛮艰巨的任务。混迹币圈一年多,如今地址、区块高度、交易ID整天用,BTC...

3097
来自专栏区块链维基

2018年区块链高考统一试题(A、B卷)

小明13年花费2万美元购买比特币,当时价格为200美元一枚,1个月左右,以180美元价格全部卖出。

1143
来自专栏汇智网教程

区块链开发入门

3319

扫描关注云+社区