JavaScript指定红包金额的算法怎样实现?
Admin 2021-09-17 群英技术资讯 1842 次浏览
今天给大家分享一个比较有趣的实例,相信很多朋友都有抢过微信红包吧,有的人红包抢到的金额的多,有的人抢到的少,那么大家是否有好奇这是怎样实现的,下面小编就给大家介绍一下用JavaScript实现指定红包金额的算法,感兴趣的朋友就继续往下看吧。


/*
param: float, int, int, float
param1:红包金额总额
param2:红包数目
param3:指定特殊红包
param4:指定特殊红包金额
*/
let getPrize = function(total, number, index, volume){
let allowance = total - volume;
let arr = [];
let i = 0;
while(i < number - 2){
// 指定[0.01,allowance-(i*0.01))
let temp = (Math.random()*(allowance - (number - 1 - i) * 0.01) + 0.01).toFixed(2);
// if(temp < 0) console.log(`temp:${temp}`);
temp = temp <= 0 ? 0.01 : temp;
arr.push(parseFloat(temp));
allowance = parseFloat((allowance - temp).toFixed(2));
i++;
// console.log(`arr:${arr}, i:${i}`);
// 如果出现小于0的分配情况,剥削强者均分
if(allowance <= 0){
// console.log(`alowance:${allowance}`);
let w = arr.filter((val,index)=>{
// console.log(`val:${val}`);
if(val > 0.01){
arr[index] = parseFloat((arr[index] - 0.01).toFixed(2));
return val;
}
});
if(w.length == 0){
allowance = 0;
}else{
allowance = 0.01;
}
}
}
// 最后一个放入
arr.push(parseFloat(allowance.toFixed(2)));
let result = arr;
return result.slice(0, index).concat(parseFloat(volume), result.slice(index));
}
测试样例
// Test sample
for(let m = 0; m < 10000; m++){
let total = (Math.random()*100 + 0.01).toFixed(2);
let number = Math.floor(Math.random()*20 +2);
while(total / number < 0.01){
number = Math.floor(Math.random()*20 +2);
}
let index = Math.floor(Math.random()*(number - 1));
let volume = (Math.random()*(total - 0.01*(number-1))+0.01).toFixed(2);
while(volume >= total || volume + 0.01*(number-1) > total){
// console.log(`xx:${volume}`);
volume = (Math.random()*(total - 0.01*(number-1))+0.01).toFixed(2);
volume = volume <= 0 ? 0.01 : volume;
}
let test = getPrize(total, number, index, volume);
// console.log(test);
let sum = test.reduce((total,val)=>total+=parseFloat(val));
sum = sum.toFixed(2);
if(sum !== total) {
console.log(`volume:${volume}, total: ${total}, number: ${number}`);
console.log(`sum:${sum}`);
console.log(test);
}
test.map((val,index)=>{
if(val <= 0 && index !== test.length - 1){
console.log(`volume:${volume}, total: ${total}, number: ${number}`);
console.log(`sum:${sum}`);
console.log(test);
}
});
}
以上就是用JavaScript实现指定红包金额算法的介绍,上述代码仅供参考,感兴趣的朋友可以了解一下,希望本文对大家学习JavaScript有帮助,想要了解更多python的mysql模糊查询的内容,请浏览其他相关的文章。
文本转载自脚本之家
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要介绍了JavaScript字典与集合详解,集合是由一组无序且不重复的元素构成。我们可以将集合看成一种特殊的数组,它的特殊之处就是无序且不重复,这也就意味着我们不能通过下标的方式进行访问,而且集合中不会出现重复的元素
这篇文章主要为大家详细介绍了vue实现省市区的级联选择,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
这篇文章给大家分享的是JS中getday方法的相关内容。在javascript中,escape()方法能用于指定日期是星期几,小编觉得挺实用的,因此分享给大家做个参考,文中的示例代码介绍得很详细,有需要的朋友可以参考,接下来就跟随小编一起学习一下吧。
JavaScript分页组件怎样使用?分页组件是web开发中常见的组件,因此本文就分享个JavaScript分页组件使用示例给大家做个参考,我们需要实现的需求如下,接下来我们就来看看怎样实现吧。
本文主要介绍了基于React Context实现一个简单的状态管理的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008