news 2026/5/12 14:38:09

php 随机红包数生成

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
php 随机红包数生成
无论哪种实现方式,随机红包都要遵守几个核心约束(这是和单纯随机数最大的区别):
  1. 总金额固定(比如 100 元分 10 个红包);
  2. 每个红包金额非空(至少 0.01 元,避免分到 0);
  3. 金额随机且符合 “拼手气” 特性(有人多有人少,而非平均);
  4. 所有红包金额之和严格等于总金额。
/** * 随机分配红包金额. * * @param float|string $totalMoney 总金额(元) * @param int $totalTimes 总次数 * @param float|string $minMoney 单次最小值(元) * @param float|string $maxMoney 单次最大值(元) * * @return array|false 包含每次红包金额的数组(保留两位小数)|false 参数错误时返回false */ function random_red_packet($totalMoney, $totalTimes, $minMoney, $maxMoney) { // 转换为分进行计算,避免浮点数精度问题 $totalMoneyCent = (int) bcmul($totalMoney, 100); $minMoneyCent = (int) bcmul($minMoney, 100); $maxMoneyCent = (int) bcmul($maxMoney, 100); // 参数合法性校验 if ( $totalTimes <= 0 || $minMoneyCent <= 0 || $maxMoneyCent < $minMoneyCent || $totalMoneyCent < $totalTimes * $minMoneyCent // 总金额不足以分配最小值 || $totalMoneyCent > $totalTimes * $maxMoneyCent // 总金额超过最大值总和 ) { return false; } $redPackets = []; $remainingCent = $totalMoneyCent; $remainingTimes = $totalTimes; for ($i = 0; $i < $totalTimes; ++$i) { // 最后一次直接分配剩余金额 if (1 == $remainingTimes) { $currentCent = $remainingCent; } else { // 计算当前可分配的最大金额:不超过单红包最大值,且剩余次数能满足最小值 $maxCurrentCent = min( $maxMoneyCent, $remainingCent - ($remainingTimes - 1) * $minMoneyCent ); // 随机生成当前红包金额(在最小值和最大可分配金额之间) $currentCent = mt_rand($minMoneyCent, $maxCurrentCent); } // 转换为元并保留两位小数 $redPackets[] = bcdiv($currentCent, 100, 2); // 更新剩余金额和次数 $remainingCent = bcsub($remainingCent, $currentCent, 2); --$remainingTimes; } // 打乱数组(可选,模拟随机顺序) shuffle($redPackets); return $redPackets; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/11 16:19:38

用数据说话!AI论文写作软件 千笔AI VS 锐智 AI,专科生首选神器!

随着人工智能技术的迅猛迭代与普及&#xff0c;AI辅助写作工具已逐步渗透到高校学术写作场景中&#xff0c;成为专科生、本科生、研究生完成毕业论文不可或缺的辅助手段。越来越多面临毕业论文压力的学生&#xff0c;开始依赖各类AI工具简化写作流程、提升创作效率。但与此同时…

作者头像 李华
网站建设 2026/5/10 15:43:41

两岁6月的宝宝,每天都在晚上12点说自己饿,其实吃的也不少,为啥?

两岁6月的宝宝,每天都在晚上12点说自己饿,其实吃的也不少,为啥? 你说的情况很典型,涉及 两岁半宝宝夜间“饿了”喊”的行为,但大多数情况下和真正的饥饿关系不大。我们可以从几个角度分析。 一、可能原因 1️⃣ 行为/心理因素(最常见) 寻求关注或安全感:宝宝白天受限…

作者头像 李华
网站建设 2026/5/10 18:25:35

交稿前一晚!8个AI论文平台测评:本科生毕业论文写作全攻略

在论文写作日益数字化的今天&#xff0c;越来越多的本科生开始借助AI工具提升效率、降低压力。然而面对市场上琳琅满目的AI论文平台&#xff0c;如何选择真正适合自己的工具成为一大难题。为此&#xff0c;我们基于2026年的实测数据与用户真实反馈&#xff0c;对多款主流AI论文…

作者头像 李华
网站建设 2026/5/10 18:13:48

基于STM32的智能健康手表设计

基于STM32的智能健康手表设计 第一章 智能健康手表硬件架构设计 基于STM32的智能健康手表硬件以“高精度监测低功耗运行”为核心目标&#xff0c;选用STM32L496ZGJ6作为主控芯片&#xff0c;该芯片搭载ARM Cortex-M4内核&#xff0c;集成硬件浮点运算单元&#xff08;FPU&#…

作者头像 李华
网站建设 2026/5/10 16:10:42

基于STM32的智能手环设计

基于STM32的智能手环设计 第一章 智能手环硬件架构设计 基于STM32的智能手环硬件设计以低功耗为核心原则&#xff0c;选用STM32L431CBT6作为主控芯片&#xff0c;该芯片搭载ARM Cortex-M4内核&#xff0c;支持多种低功耗模式&#xff0c;满足手环续航需求。硬件架构分为核心控制…

作者头像 李华
网站建设 2026/5/10 15:52:04

Kafka 消息不丢失:一次把话说清楚

一、Kafka 为啥会丢消息&#xff1f;先泼一盆冷水&#xff1a;Kafka 本身不保证消息 100% 不丢。丢不丢&#xff0c;取决于你怎么用它 &#x1f447;你要是 acks0&#xff0c;那就是“发出去就当成功”&#xff0c;消息随缘你要是自动提交 Offset&#xff0c;那就是“吃没吃不重…

作者头像 李华