$amount = 1; // 红包总金额
$packageCount = 30; // 红包总个数
$randomFlag = true; // 金额是否随机
$grantedAmount = 0; // 已领取的金额
$averageAmount = (float)bcdiv($amount, $packageCount, 2);
if ($averageAmount < 0.01) {
exit("红包个数不能超过 " . $amount / 0.01 . " 个。\n");
}
echo "================== 发包开始,总共 {$amount} 个红包,发给 {$packageCount} 个人。 ==================\n";
for ($i = 1; $i <= $packageCount; $i++) {
if ($randomFlag) { // 随机分
$leftAmount = $amount - $grantedAmount;
$leftPackage = $packageCount - $i + 1;
$averageAmount = (float)bcdiv($leftAmount, $leftPackage, 2);
$random = (float)bcdiv(mt_rand(0, ($averageAmount * 100 - 1)), 100, 2); // 边界
$changeFunction = mt_rand(0, 1) ? 'bcadd' : 'bcsub';
$shouldGetAmount = $i == $packageCount ? bcsub($amount, $grantedAmount, 2) : $changeFunction($averageAmount, $random, 2);
} else { // 平均分
$shouldGetAmount = $i == $packageCount ? bcsub($amount, $grantedAmount, 2) : $averageAmount;
}
$grantedAmount = bcadd($grantedAmount, $shouldGetAmount, 2);
echo "你是第 {$i} 个领取红包的人,领到 {$shouldGetAmount} 个红包。【当前共发了 {$grantedAmount} 个红包】\n";
}
echo "================== 发包结束,总共发了 {$grantedAmount} 个红包。 ==================\n";
echo "end。 \n";
运行结果
================== 发包开始,总共 1 个红包,发给 30 个人。 ==================
你是第 1 个领取红包的人,领到 0.03 个红包。【当前共发了 0.03 个红包】
你是第 2 个领取红包的人,领到 0.03 个红包。【当前共发了 0.06 个红包】
你是第 3 个领取红包的人,领到 0.01 个红包。【当前共发了 0.07 个红包】
你是第 4 个领取红包的人,领到 0.02 个红包。【当前共发了 0.09 个红包】
你是第 5 个领取红包的人,领到 0.03 个红包。【当前共发了 0.12 个红包】
你是第 6 个领取红包的人,领到 0.03 个红包。【当前共发了 0.15 个红包】
你是第 7 个领取红包的人,领到 0.05 个红包。【当前共发了 0.20 个红包】
你是第 8 个领取红包的人,领到 0.03 个红包。【当前共发了 0.23 个红包】
你是第 9 个领取红包的人,领到 0.05 个红包。【当前共发了 0.28 个红包】
你是第 10 个领取红包的人,领到 0.05 个红包。【当前共发了 0.33 个红包】
你是第 11 个领取红包的人,领到 0.03 个红包。【当前共发了 0.36 个红包】
你是第 12 个领取红包的人,领到 0.01 个红包。【当前共发了 0.37 个红包】
你是第 13 个领取红包的人,领到 0.03 个红包。【当前共发了 0.40 个红包】
你是第 14 个领取红包的人,领到 0.01 个红包。【当前共发了 0.41 个红包】
你是第 15 个领取红包的人,领到 0.02 个红包。【当前共发了 0.43 个红包】
你是第 16 个领取红包的人,领到 0.05 个红包。【当前共发了 0.48 个红包】
你是第 17 个领取红包的人,领到 0.05 个红包。【当前共发了 0.53 个红包】
你是第 18 个领取红包的人,领到 0.03 个红包。【当前共发了 0.56 个红包】
你是第 19 个领取红包的人,领到 0.05 个红包。【当前共发了 0.61 个红包】
你是第 20 个领取红包的人,领到 0.03 个红包。【当前共发了 0.64 个红包】
你是第 21 个领取红包的人,领到 0.01 个红包。【当前共发了 0.65 个红包】
你是第 22 个领取红包的人,领到 0.01 个红包。【当前共发了 0.66 个红包】
你是第 23 个领取红包的人,领到 0.03 个红包。【当前共发了 0.69 个红包】
你是第 24 个领取红包的人,领到 0.02 个红包。【当前共发了 0.71 个红包】
你是第 25 个领取红包的人,领到 0.01 个红包。【当前共发了 0.72 个红包】
你是第 26 个领取红包的人,领到 0.09 个红包。【当前共发了 0.81 个红包】
你是第 27 个领取红包的人,领到 0.05 个红包。【当前共发了 0.86 个红包】
你是第 28 个领取红包的人,领到 0.04 个红包。【当前共发了 0.90 个红包】
你是第 29 个领取红包的人,领到 0.09 个红包。【当前共发了 0.99 个红包】
你是第 30 个领取红包的人,领到 0.01 个红包。【当前共发了 1.00 个红包】
================== 发包结束,总共发了 1.00 个红包。 ==================
end。
等额红包怎么发Python 等额红包怎么设置
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
抖音直播抢红包 Python
抖音直播抢红包
Selenium -
微信现金红包开发
微信现金红包
API xml 数据 -
Java 等额本金等额本息工具类
原文:http://www.open-open.com/code/view/1449034309983 等额本息: 等额本金:
java ide 四舍五入 i++ 工具类