public function randMoney($sum,$count)
{
$arr = [];
$hes = 0;
$hess =0;
for ($i=0;$i<$count;$i++){
$rand =rand(1,1000);
$arr[]=$rand;
$hes+=$rand;
}
$arr2 =[];
foreach ($arr as $key=>$value){
$round = round(($value/$hes)*$sum,2);
$arr2[] =$round;
$hess+=$round;
}
if($sum !=round($hess,2)){
$hesss =round($sum-$hess,2);
$arr2[0]=$arr2[0]+$hesss;
}
return $arr2;
}
用法
用50元生成10个红包:
$data = $this->randMoney(50,10);
var_dump($data);
结果
array(10) {
[0] => float(4.05)
[1] => float(4.52)
[2] => float(6.06)
[3] => float(7.03)
[4] => float(4.28)
[5] => float(2.55)
[6] => float(2.59)
[7] => float(5.43)
[8] => float(6.64)
[9] => float(6.83)
}
局限性
1.生成的金额相对比较平均,调节 rand 的区间可以调节增大平均值得差额。
2.如果要生成一亿级的大数甚用。