首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

算法思考:红包金额生成

本篇先不关注整体架构,选择红包金额的计算方法作为分析内容。 在当时的项目中,红包金额计算主要是采用了基于一些入参的随机数生成,并且生成的是单个红包金额,并未使用队列方式做预生成。...二 题目描述 要求设计在微信群抢红包的算法,红包总金额为 m 元,分成 n 份,要求返回一个红包金额数组。...一个简单的方法,n 个人,生成 n 次金额数据,当然,我们也要保证 n 次的金额综合=m 元,且每次每人领取到的金额最小值是 0.01 元,也就是一分钱;最大值是当前的剩余金额-剩余人数。...例如总金额 1 元,5 个人可抢,那么第一个人可以抽到的最大金额是 0.96 元,之后每个人领取一元,这是最极端的情况。 其次,上面的这种算法是否能够保证绝对随机?...既然生成的金额数组可能不是绝对平均,那么我们再生成一次随机数组,调整初始金额数组中各元素的顺序,做个随机乱序,那么就可以接近题目要求的效果。

1.2K30

Java实现红包随机金额算法

RedPacketUtils { private static final Random random = new Random(); /** * 根据总数分割个数及限定区间进行数据随机处理...答:微信金额是拆的时候实时算出来,不是预先分配的,采用的是纯内存计算,不需要预算空间存储。。 采取实时计算金额的考虑:预算需要占存储,实时效率很高,预算才效率低。 2....分配:红包里的金额怎么算?为什么出现各个红包金额相差很大? 3. 答:随机,额度在0.01和剩余平均值*2之间。...红包的设计 答:微信从财付通拉取金额数据郭莱,生成个数/红包类型/金额放到redis集群里,app端将红包ID的请求放入请求队列中,如果发现超过红包的个数,直接返回。...根据红包的裸祭处理成功得到令牌请求,则由财付通进行一致性调用,通过像比特币一样,两边保存交易记录,交易后交给第三方服务审计,如果交易过程中出现不一致就强制回归。 5. 发性处理:红包如何计算被抢完?

99320

JSON金额解析BUG的解决过程

就在春节放假前最后一天,当客户完成交易后,运营同事发现一个天大的问题,流水表中的部分金额,跟提交支付的金额有出入,差了几分钱。 这位客官说了,几分钱的问题,还是问题?...先从不同的数据库中找出付款前后的金额进行比较,发现还真不是个案。这是当时比较的结果,黑体部分有差异。 ? 这些数据中,业务系统的金额跟客户提交金额相等,账户记录的金额有异。...2.账户记账的处理过程 这是一个简略的处理过程,支付系统生成json并传输到账户系统,解析后保存到数据库。 image.png 经过查看各个环节的日志,发现问题出在解析环节。...仔细查看json字符串,发现金额没有使用双引号括起来,说明生成json的时候,直接赋值的是金额,而不是转成字符串后再赋值。 那么如果将金额用双引号括起来,会有这个问题吗?...1.修改json格式 用这个方案,只需要在支付系统中生成json对象的时候,将金额转成字符串之后在赋值到json即可。

1.1K50

如何生成微信红包金额

输入数据: 红包总金额 amount 红包个数 count 如果 amount / count < 0.01 元,报错:单个红包金额不可低于0.01元,请重新填写金额。...输出数据: 一个数组:数组中包括 count 个红包金额(每个金额都大于等于0.01元,所有红包的金额加起来等于总金额 amount) 一个重要问题 首先我们先确定一个重要的问题:每个红包的金额是先生成好还是在边抽边生成...2 计算红包金额 好像已经差不多答案了。。 但是有几个问题需要考虑: 精度为0.01元,金额不能出现 4.415011 如果算出来的红包金额小于0.01元,怎么办? ?...解决办法: 所有的红包金额需要 floor (舍掉多余的小数位) : 比如 a1 的金额 从 4.415011 –> 4.41,最后一个红包 = 红包总金额 – 已经 floor 的红包的和 不管是否小于...0.01,先把每个红包的金额计算出来。

4K80
领券