php 随机钱数,PHP 仿微信红包金额随机

博主寒冰最近闲来无事。就想研究一下微信红包的金额随机算法。早在微信红包刚出来的时候就研究过。始终不得要领。后来,通过查阅诸多资料。听说要实现“正态分布”。这个理论的东西不想深挖。恰好在网上一篇博客找到一个相对完整的算法。我经过试用确实不错。经过我的一些优化达到了可用级别。

PHP 源码如下:

class RandMoney

{

/**

* 红包金额(元)

*

* -- 最小值:0.01。

*

* @var float

*/

private $rewardMoney;

/**

* 红包数量

*

* @var int

*/

private $rewardNum;

/**

* 分散度值

*

* -- 1 ~ 10000

* --- 最佳值 100

*

* @var int

*/

private $scatter;

/**

* 执行红包生成算法

*

* @param float $rewardMoney 随机总金额。

* @param int $rewardNum 拆分数量。

* @param int $scatter 分散度值。

* @return void

*/

public function splitReward($rewardMoney, $rewardNum, $scatter = 100)

{

// 传入红包金额和数量。

$this->rewardMoney = $rewardMoney;

$this->rewardNum = $rewardNum;

$this->scatter = $scatter;

$this->realscatter = $this->scatter / 100;

$avgRand = round(1 / $this->rewardNum, 4);

$randArr = [];

while (count($randArr) < $rewardNum) {

$t = round(sqrt(mt_rand(1, 10000) / $this->realscatter));

$randArr[] = $t;

}

$randAll = round(array_sum($randArr) / count($randArr), 4);

$mixrand = round($randAll / $avgRand, 4);

$rewardArr = [];

foreach ($randArr as $key => $randVal) {

$randVal = round($randVal / $mixrand, 4);

$rewardArr[] = round($this->rewardMoney * $randVal, 2);

}

sort($rewardArr);

$rewardAll = array_sum($rewardArr);

$rewardArr[$this->rewardNum - 1] = round($this->rewardMoney - ($rewardAll - $rewardArr[$this->rewardNum - 1]), 2);

rsort($rewardArr);

return $rewardArr;

}

}

调用:

$money = 100; // 总额。

$people = 200; // 红包个数。

$scatter = 100; // 分散度。就是拆成的金额分页更大。

$reward = new RandMoney();

$rewardArr = $reward->splitReward($money, $people, $scatter);

print_r($rewardArr);

大家可以执行一下试试。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/349284.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

excel 两列模糊匹配给出结果_北大硕士给大脑植入Excel病毒,工作效率提升了好几倍...

在工作中&#xff0c;我们经常会碰到这样的同事&#xff0c;他们是这样完成工作的&#xff1a;先用计算器算好结果&#xff0c;甚者动用手指头在电脑屏幕上数数&#xff0c;然后把数据填写到Excel表格中。结果可以预见&#xff0c;原本可以在上班时间完成的工作&#xff0c;愣是…

5 在java等于多少,java基础面试题之Java中的Math. round(-1. 5)等于多少

Java 中的 Math. round(-1. 5) 等于多少&#xff1f;答案&#xff1a;-1/*** Returns the closest {code long} to the argument, with ties* rounding to positive infinity.** Special cases:* If the argument is NaN, the result is 0.* If the argument is negative infin…

java ee cdi_Java EE CDI Producer方法教程

java ee cdi这是CDI Producer方法的教程。 在CDI中&#xff0c;生产者方法生成一个对象&#xff0c;然后可以将其注入。 当我们要注入本身不是bean的对象&#xff0c;要注入的对象的具体类型在运行时可能有所不同&#xff0c;或者当对象需要一些bean构造函数不执行的自定义初始…

qnap nas web php,如何在QNAP NAS上建立并使用 iSCSI Target

本帖最后由 小Q 于 2015-2-5 13:30 编辑在QNAP Turbo NAS上建立并使用iSCSI Target&#xff0c;快速、便利且便宜建置网络储存系统之方式内容&#xff1a;l 在Windows中使用Microsoft iSCSI启动器来连接iSCSI装置什么是iSCSI且它有什么好处?iSCSI(Internet Small Computer Sy…

python坐标轴刻度设置对数_Python中的对数刻度

我试图以对数比例(Y轴)绘制一个图形&#xff0c;但我需要在Y轴上显示原始值。我用了密码&#xff1a;# -*- coding: utf-8 -*-import mathimport matplotlib.pyplot as pltimport matplotlib.dates as datesfrom datetime import datetime, timedeltaimport numpy as npx []y …

openssl php api,PHP7使用openssl解密易班API中的用户数据

PHP7使用openssl解密易班API中的用户数据一、mcrypt扩展解密自从PHP版本更新到了7.1以上以后&#xff0c;mcrypt扩展被废弃&#xff0c;使用mcrypt扩展会出现如下图的报错。只能使用openssl来代替。然而易班轻应用提供的还是旧版本的mcrypt扩展&#xff0c;这将导致php版本升级…

Spring MVC的DispatcherServlet – Java开发人员应该知道的10件事

如果您使用过Spring MVC&#xff0c;那么您应该知道什么是DispatcherServlet&#xff1f; 它实际上是Spring MVC的心脏&#xff0c;确切地说是MVC设计模式或控制器的C语言。 应该由Spring MVC处理的每个Web请求都通过DispatcherServlet处理。 通常&#xff0c;它是Front Contro…

python123第七章_Python入门第7/10页

Python入门第7/10页更新时间&#xff1a;2007年02月08日 00:00:00 作者&#xff1a;第七章 输入输出有几种办法可以从程序输出&#xff1b;数据可以用可读的形式显示&#xff0c;或保存到文件中以备日后使用。本章讨论一些输入输出的办法。7.1 输出格式控制到现在为止我们已经…

运行时错误7内存溢出_分别从运行时和GC的角度看JAVA8内存管理

运行时区域1.程序计数器程序计数器&#xff08;Program Counter Register&#xff09;是一块较小的内存空间&#xff0c;它可以看作是当前线程所执行的字节码的行号指示器。在虚拟机概念模型里&#xff08;概念模型&#xff0c;各种虚拟机可能会通过一些更高效的方式实现&#…

php baocuo error,PHP编译报错configure: error: Cannot find libmysqlclient under /usr.

今天编译PHP的时候遇到了几个错误&#xff0c;记录一下第一次编译的时候报错如下&#xff1a;configure: error: mcrypt.h not found. Please reinstall libmcrypt.报这个错是因为没有安装libmcrypt这个包&#xff0c;下载地址如下&#xff1a;wget ftp://mcrypt.hellug.gr/pub…

dart和python哪个好_RedMonk 2020 年 Q1 编程语言排行:Python 冲进前二,Dart 值得关注...

知名软件行业分析公司 RedMonk 发布了 2020 年第一季度编程语言排行榜。RedMonk 编程语言排行榜通过追踪编程语言在 GitHub 和 Stack Overflow 上的代码使用情况与讨论数量&#xff0c;统计分析后进行排序&#xff0c;其旨在深入了解潜在的语言采用趋势。该榜单一年发布两次&am…

jclouds_使用jclouds在S3上分段上传

jclouds1.目标 在上一篇文章中 &#xff0c;我们研究了如何使用jclouds中的通用Blob API将内容上传到S3。 在本文中&#xff0c;我们将使用jclouds的S3特定的异步API上传内容并利用S3提供的分段上传功能。 2.准备 2.1。 设置自定义API 上传过程的第一部分是创建jclouds API-这…

mysql+表中公共信息,計算mysql中兩個表之間的公共行數

so heres my question...這是我的問題…Hi have two tables in mysql, called go_H and go_J, both looking like this:在mysql中有兩個表&#xff0c;叫做go_H和go_J&#xff0c;它們都是這樣的:go_Hgo_H---------------------------| gene | GoCode |-----------------------…

极域课堂管理系统软件如何取消控制_微缔电子组装业MES系统软件六大功能组成...

电子组装业MES系统软件六大功能组成MES系统软件是制造执行系统的英文简称&#xff0c;MES系统软件在整个企业信息集成系统中承上启下&#xff0c;是生产活动与管理活动信息沟通的桥梁&#xff0c;MES系统软件在产品从工单下发到生产成成品的整个过程中&#xff0c;扮演着促进生…

使用虚拟时间测试基于时间的反应堆堆芯流

Reactor Core实现了Reactive Streams规范&#xff0c;并处理了&#xff08;可能无限的&#xff09;数据流。 如果您感兴趣&#xff0c;请查看它提供的出色文档 。 在这里&#xff0c;我假设对Reactor Core库的Flux和Mono类型有一些基本的了解&#xff0c;并且将介绍Reactor Cor…

matlab二维数组排序函数,Matlab 用sort函数排序 二维数组

在Matlab中排序某个向量(一维)时&#xff0c;可以使用sort(A)&#xff0c;其中A为待排序的向量&#xff0c;如果仅是用来排序A&#xff0c;那么直接使用sort(A)即可&#xff0c; 如果排序后还需要保留原来的索引可以用返回值&#xff0c;即[B,ind]sort(A)&#xff0c;计算后&am…

多个cuda 被单进程沾满_报名 | 提高GPU利用率,听英伟达专家分享这个CUDA工具

随着 NVIDIA GPU 计算性能的不断提升&#xff0c;如何提升 GPU 利用率是开发者普遍关心的问题之一。从 Kepler 架构开始&#xff0c;NVIDIA GPU 支持多个 CUDA kernels 函数的并发执行&#xff0c;称为 Hyper-Q 技术。Hyper-Q 技术支持多个 CUDA streams、多个 CPU threads 或者…

usb转ttl模块与matlab,USB接口转TTL小板的自检测试

现在电脑基本上都不会配置DB9串行数据端口了&#xff0c;这给一些喜欢折腾刷机和单片机加载程序的朋友带来了诸多的不便。还好&#xff0c;随着技术的发展&#xff0c;USB接口转TTL的产品越来越成熟&#xff0c;而这种产品主要以采用PL-2303HX芯片作为主控器的居多&#xff0c;…

程序员python工作_程序员如何在工作中进步

工作&#xff0c;对于大部分人都是不可避免的一件事&#xff0c;有的人是为了生存&#xff0c;有的人是为了自我价值的实现&#xff0c;也有人是为了将来不工作而现在努力工作&#xff0c;出发点可能各种各样&#xff0c;但是工作总是大部分人不可避免的一部分。程序员&#xf…

matlab 误差椭圆,求3倍标准差误差椭圆分析的程序

根据《白话空间统计之九&#xff1a;方向分布(标准差椭圆)修正版》(有些地方没有理解清楚)&#xff0c;写了下面的程序。但是好像结果不对Zmvnrnd([0.5 1.5], [0.025 0.03 ; 0.03 0.16], 50);XZ(:,1); YZ(:,2);mean_Xnanmean(X); mean_Ynanmean(Y); %椭圆圆心%确定长短半轴…