除了最后一人,其他每个人随机范围为 (0, 20),也相当于每人平均 10 块吧。
可以再打乱一次顺序来避免最后一人问题。
function grabMoney(total, maxTimes) { // 结果数组 剩余次数剩余金额 var res = [], times = maxTimes, rest = total; while (--times > 1) { var r = random(0, rest / times * 2); var _r = r.toFixed(2).replace('.', ''); // 处理双精度运算问题 var _rest = rest.toFixed(2).replace('.', ''); rest = (_rest - _r) / 100; r = parseFloat(r.toFixed(2)); res.push(r); } res.push(rest); return res;}耗时红包
每人随机范围为 (0, 25),超出总价就重新排,低于总价则平摊。
由于有除法,余数计算误差大,所以系统会贪掉一丢丢。
function grabMoney(total, maxTimes) { var res = new Array(maxTimes); var grabed = 0; for (var i=0; i<res.length; i++) { var r = random(0, total / 4); r = parseFloat(r.toFixed(2)); grabed += r; if (grabed > total) return grabMoney(total, maxTimes); res[i] = r; } if (grabed < total) { var average = (total - grabed) / total; res = res.map(function(item) { return item + average; }); } return res;}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)