您好,登錄后才能下訂單哦!
這篇文章教你用java做個(gè)紅包小項(xiàng)目!
注意事項(xiàng)
因?yàn)榻痤~涉及到分,小數(shù)點(diǎn)后保留兩位,數(shù)值類型的轉(zhuǎn)換操作需要注意;
此中方案相對簡陋,并未實(shí)現(xiàn)每次紅包最大值在0.01-剩余紅包均值的2倍間;
/*
*/public class RedPacketUtil {
//微信紅包的最大值和最小值,和最大紅包金額系數(shù)
private static final float MINMUM = 0.01f;
private static final float MAXMUM = 200.00f;
private static final float TIMES = 2.1f;
//判斷當(dāng)前金額和數(shù)量是否正確
public boolean isRight(float money,int count){
//計(jì)算當(dāng)前平均值
float ave = (float)money / count;
if(ave < MINMUM){
return false;
}else if(ave > MAXMUM){
return false;
}
return true;
}
//生成每個(gè)具體紅包的金額
public float redPacket(float money, float min, float maxs, int count) {
//判斷當(dāng)前人數(shù)
if(count == 1){
//確保紅包不小于0.01元
money = money > MINMUM ? money : MINMUM;
return (float)(Math.round(money 100)) / 100;
}
float max = maxs > money ? money : maxs;
//生成單個(gè)紅包數(shù)量,且保證紅包的精度
float one = (float) (Math.random()(max - min) + min);
one = (float)(Math.round(one * 100)) / 100;
float moneyRest = (money - one);
//判斷當(dāng)前紅包數(shù)量是否合理
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;
}
//拆分紅包,生成具體的紅包數(shù)
public List<Float> splitRedPacket(float money,int count){
//判斷當(dāng)前金額和數(shù)量是否正確
if(!isRight(money,count)){
return null;
}
//記錄每個(gè)紅包的數(shù)量
List<Float> rpList = new ArrayList<Float>();
//單個(gè)紅包的最大金額
float max = (float)(money * TIMES)/ count ;
max = max > MAXMUM ? MAXMUM : max;
float one = 0;
//開始記錄每個(gè)紅包的數(shù)量
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);
//驗(yàn)證金額總數(shù)
float sum = 0;
for(float i : result){
sum = sum + i;
}
System.out.println(sum);
}}
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。