php 产生总和为1的数值阵列,且指定小数精度

如题:
输入:
$num 要产生的数值数量 (正整数) 预设为2个
$precision 决定小数下几位 (正整数) 预设精度为小数下6位

输出:
$weightarray $num个元素,总和为1的阵列 (实数阵列)

function weight_array($num = 2, $precision = 6){    $min = 0;    $max = pow(10, $precision);    $weightarray = [];    $sum_temp = 0;    //若只有一个元素,权重为1    if($num == 1){        $weightmatrix[0] = 1;    }else{        for($i=0;$i<($num-1);$i++){            array_push($weightarray, rand(0, $max));            $max = $max-$weightarray[$i];            $sum_temp += $weightarray[$i];        }        //保证产出的阵列,数值总和必为1        if(($num-1)>0){            $last = pow(10, $precision) - $sum_temp;            array_push($weightarray, rand($last, $last));        }        //将阵列内的整数数值转成小数点后6位        $sum_temp = 0;        for($i=0;$i<($num);$i++){            $weightarray[$i] /= pow(10, $precision);            $sum_temp += $weightarray[$i];        }    }    //避免产出的权重第一个都很重,因此加入一个洗牌的过程    shuffle($weightarray);    return $weightarray;}

关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章