微信是現在人們平常生活離不開的app,平常交流,小額轉帳,視頻通話等都很方便。
微信紅包也是人們使用得最多的功能,朋友一塊兒出去吃個飯,飯後AA用微信紅包;逢年過節,給親朋好友發個紅包……
這篇文章教你用java作個紅包小項目!
注意事項
由於金額涉及到分,小數點後保留兩位,數值類型的轉換操做須要注意;
此中方案相對簡陋,並未實現每次紅包最大值在0.01-剩餘紅包均值的2倍間;
/*java
*/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;
}app
//生成每一個具體紅包的金額
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; dom
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;
}ide
//拆分成包,生成具體的紅包數
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);
}}
code