您好,登錄后才能下訂單哦!
這篇文章教你用java做個紅包小項目!
注意事項
因為金額涉及到分,小數點后保留兩位,數值類型的轉換操作需要注意;
此中方案相對簡陋,并未實現每次紅包最大值在0.01-剩余紅包均值的2倍間;
/*
*/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);
}}
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。