微信红包算法
5块钱生成五个红包,要注意的有
1、生成5个随机数
2、5个随机数加起来必须等于5
3、红包要设置最小值 如最小值不能小于0.01
4、红包要设置最大值,如果第一个红包为5,剩下四个红包没法分,这里设置最大值为4.9
5、处理金额的浮点数,两位小数
下面是代码
var RedPackage = function (money, num) {
// Num 数量 arr 红包数组 all 红包总金额 money 剩余金额
var money = money, Num = num, arr = [], all = money,num2=parseFloat(money/2).toFixed(2)
for (var i = 1; i < Num; i++) {
var n1 = parseFloat(Math.random() * money).toFixed(2)
if (n1 < 0.01) { //处理最小值
n1 = '0.01'
}
if (n1 > num2) { //处理最大值
n1 = num2
}
arr.push(n1)
money = money - n1
if (i == Num - 1) {
let sum = 0;
for (let i = 0; i < arr.length; i++) {
sum += Number(arr[i])
}
last = parseFloat(all - sum).toFixed(2)
arr.push(last)
}
}
console.log(arr) // 红包的随机数
console.log(eval(arr.join('+')))
}
1、传入的值是金额和红包数量,
2、用一个循环依次生成红包,
3、生成第一个红包n1 为小于总金额的一个随机数,保留两位小数,最大值最小值判断
4、剩余金额money1为 红包总金额减去第一个红包金额n1
5、生成第二个红包n2为小于剩余金额money1的一个随机数,保留两位小数,最大值最小值判断
6、剩余金额money2为 红包总金额减去红包金额n1,n2
7、依次类推,当剩余最后一个红包是不需要再循环,最后一个红包的值为,总金额all减去其他红包之和。
写在最后,欢迎大家留言~~