教你用java做个微信红包!_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 教你用java做个微信红包!

教你用java做个微信红包!

 2020/1/5 21:19:05  王囧草  程序员俱乐部  我要评论(0)
  • 摘要:java微信红包微信是如今人们日常生活离不开的app,日常交流,小额转账,视频通话等都很方便。微信红包也是人们使用得最多的功能,朋友一起出去吃个饭,饭后AA用微信红包;逢年过节,给亲朋好友发个红包……这篇文章教你用java做个红包小项目!注意事项因为金额涉及到分,小数点后保留两位,数值类型的转换操作需要注意;此中方案相对简陋,并未实现每次红包最大值在0.01-剩余红包均值的2倍间;/**红包设计要求:*1-红包最小值为0.01,最大值为200*2-红包的金额面值为小数点后两位*3
  • 标签:Java 教你

java微信红包
微信是如今人们日常生活离不开的app,日常交流,小额转账,视频通话等都很方便。

微信红包也是人们使用得最多的功能,朋友一起出去吃个饭,饭后AA用微信红包;逢年过节,给亲朋好友发个红包……

这篇文章教你用java做个红包小项目!
注意事项
因为金额涉及到分,小数点后保留两位,数值类型的转换操作需要注意;
此中方案相对简陋,并未实现每次红包最大值在0.01-剩余红包均值的2倍间;
/*
* 红包设计要求:
* 1-红包最小值为0.01,最大值为200
* 2-红包的金额面值为小数点后两位
* 3-避免单个红包数值太大,通过系数设定
* 4-红包总量满足金额数
* */public class RedPacketUtil {
??? //微信红包的最大值和最小值,和最大红包金额系数
??? private static final float MINMUM = 0.01f;
??? private static final float MAXMUM = 200.00f;
??? private static final float TIMES = 2.1f;
???
??? //判断当前金额和数量是否正确
??? public boolean isRight(float money,int count){
??????? //计算当前平均值
??????? float ave = (float)money / count;
??????? if(ave < MINMUM){
??????????? return false;
??????? }else if(ave > MAXMUM){
??????????? return false;
??????? }
??????? return true;
??? }
???
??? //生成每个具体红包的金额
??? public float redPacket(float money, float min, float maxs, int count) {
??????? //判断当前人数
??????? if(count == 1){
??????????? //确保红包不小于0.01元
??????????? money =? money > MINMUM ? money : MINMUM;
??????????? return (float)(Math.round(money * 100)) / 100;
??????? }
??????? float max = maxs > money ? money : maxs;
??????? //生成单个红包数量,且保证红包的精度
??????? float one = (float) (Math.random()*(max - min) + min);
??????? one = (float)(Math.round(one * 100)) / 100;
???????
??????? float moneyRest = (money - one);
???????
??????? //判断当前红包数量是否合理
??????? if(isRight(moneyRest,count - 1)){
??????????? return one;
??????? }else{
??????????? //重新分配红包
??????????? float ave = (float)moneyRest / (count-1);
??????????? if(ave < MINMUM){
??????????????? return redPacket(money,min,one,count);
??????????? }else if(ave > MAXMUM){
??????????????? return redPacket(money,one,max,count);
??????????? }
??????? }
??????? return one;
??? }
???
??? //拆分红包,生成具体的红包数
??? public List<Float> splitRedPacket(float money,int count){
??????? //判断当前金额和数量是否正确
??????? if(!isRight(money,count)){
??????????? return null;
??????? }
??????? //记录每个红包的数量
??????? List<Float> rpList = new ArrayList<Float>();
??????? //单个红包的最大金额
??????? float max = (float)(money * TIMES)/ count ;
??????? max = max > MAXMUM ? MAXMUM : max;
??????? float one = 0;
??????? //开始记录每个红包的数量
??????? for(int i = 0;i < count;i++){
??????????? one = redPacket(money,MINMUM,max,count-i);
??????????? rpList.add(one);
??????????? money = money - one;
??????? }
??????? return rpList;
??? }
???
??? public static void main(String[] args) {
??????? RedPacketUtil util = new RedPacketUtil();
??????? List<Float> result = util.splitRedPacket(200, 10);
??????? System.out.println(result);
??????? //验证金额总数
??????? float sum = 0;
??????? for(float i : result){
??????????? sum = sum + i;
??????? }
??????? System.out.println(sum);
??? }}

?

发表评论
用户名: 匿名