思路:
totalVal:🧧总金额
total:🧧数量
min:0.01
max:剩余金额平均x2 ,这里关键!!!参考了其他代码,具体为啥。。。。喃??大佬指点🙏(🌰:100元红包分5个平均是20x2,max=4,比如前面三个总共抢到了40,那第四个人的随机是(100-40)/7 x2)
🌰:total=2,第一个人抢到了0.01,第二个人就是99.99几乎为100=平均*2
randomMoney:每次抢到的随机🧧
randomMoney=min~max
function random(min, max) {
return parseFloat(parseFloat(Math.random() * (max - min) - min).toFixed(2));
}
function redBag(totalVal, total) {
if (total===1) {
return totalVal;
}
if(!total){
return new Error('total must be big than 0')
}
let result = [];
const min = 0.01;
let max = (totalVal / total) * 2;
while (total > 1) {
max = Math.floor(totalVal / total) * 2;
let randomMoney
if(total===2){
randomMoney = totalVal <= min ? min : random(min, max-0.01);
}else{
randomMoney = totalVal <= min ? min : random(min, max);
}
result.push(randomMoney);
totalVal = Number(
parseFloat(Math.round((totalVal - randomMoney) * 100) / 100).toFixed(2)
);
total--;
}
result.push(totalVal);
return result;
}
let arr = redBag(100, 8);
console.log(arr);
let s = Math.round(
arr.reduce((a, b) => {
return a + b;
})
);
console.log(s);