news 2026/5/3 2:24:07

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/2 0:28:14

AI智能体:知识变现的“执行引擎“如何重塑行业规则|创客匠人

最近&#xff0c;一款名为Clawdbot的AI工具在科技圈引发热议。与传统AI聊天机器人不同&#xff0c;它不是在陪用户聊天&#xff0c;而是能直接调用用户的日历、邮箱、Notion等工具&#xff0c;执行实际任务。这背后反映了一个被忽视的行业真相&#xff1a;知识变现的关键不是内…

作者头像 李华
网站建设 2026/4/24 1:57:54

RBAC前端架构-06:使用localstorage及Vuex用户信息存储逻辑

1-文件调整 修改frontend-vue2\src\store\index.js&#xff0c;用于整体整合Vuex更简洁 import Vue from "vue"; import Vuex from "vuex";// 标签页管理模块 import tabs from "./modules/tabs"; // 用户信息管理模块 import user from ".…

作者头像 李华
网站建设 2026/5/1 8:38:41

Claude Code 小白指北(二):五个“暗号”,让 Claude Code 干活更听话

上篇文章我们将 Claude Code 给用起来了&#xff0c;只要像聊天那样&#xff0c;把我们的想要做的事情告诉他&#xff0c;它就能吭哧吭哧的把活给我们干好。 但是…不知道小伙伴们用着用着&#xff0c;有没有发现它也有些小问题。 Claude Code 这家伙有时候过于热情&#xff0c…

作者头像 李华
网站建设 2026/4/27 10:02:29

好写作AI:当你脑中有匹野马,AI帮你建个专业赛马场

导语&#xff1a;如果你的学术灵感像烟花般绚烂&#xff0c;落到纸上却像哑炮 这画面是不是很熟悉&#xff1a; 组会时你滔滔不绝三十分钟&#xff0c;导师说“想法挺好&#xff0c;写出来看看” 深夜灵光乍现&#xff0c;在备忘录里写下十行天才构想 一周后打开文档&#x…

作者头像 李华
网站建设 2026/4/25 9:03:28

定稿前必看!千笔·专业学术智能体,继续教育论文写作神器

你是否曾在论文写作中感到力不从心&#xff1f;选题无从下手&#xff0c;框架反复调整&#xff0c;查重率屡屡超标&#xff0c;格式问题层出不穷……这些困扰让无数学生在毕业季倍感焦虑。面对学术写作的重重挑战&#xff0c;你是否渴望一款真正懂你的智能助手&#xff1f;千笔…

作者头像 李华
网站建设 2026/5/2 15:23:56

【C/C++】Order Book实现

订单簿&#xff08;Order Book&#xff09;&#xff1a;从原理到工业级实现 什么是订单簿 订单簿&#xff08;Order Book&#xff09;是交易所撮合引擎&#xff08;Matching Engine&#xff09;的核心数据结构。它维护着市场上所有未成交的限价单&#xff08;Limit Order&#…

作者头像 李华