Java红包退款_java 红包规则
List redInfoList = new ArrayList<>();
// 紅包有誤
if(num < REDPACK_MIN_QUANTITY || num > REDPACK_MAX_QUANTITY)
returnredInfoList;//校驗:金額大于0
if(redMoney.compareTo(BigDecimal.ZERO) != 1) {returnredInfoList;
}if(num <= 1) {
redInfoList.add(redMoney);returnredInfoList;
}
Random random= newRandom();for(int i = 0; i < num; i++) {//System.out.println("\n" + (i+1) + "個紅包信息:");
int surplusNum = num - i;//未分配金額紅包數量
BigDecimal curRedMoney =fightLuckRedPacked(redMoney, surplusNum, random, ERROR_INIT_NUM);
redInfoList.add(curRedMoney);
redMoney=redMoney.subtract(curRedMoney);
// MandoAssert.notTrue(redMoney.compareTo(BigDecimal.ZERO)== -1, "紅包金額有誤");//System.out.println("紅包金額:" + curRedMoney + ",剩余:" + redMoney);
}returnredInfoList;
}/*** 拼手氣紅包
*@paramredMoney 紅包金額
*@paramnum 紅包數量
*@paramrandom 隨機數生成對象
*@paramerrorNum 錯誤測試
*@return單個紅包金額*/
private static BigDecimal fightLuckRedPacked(BigDecimal redMoney, int num, Random random, interrorNum) {if(num <= 1) {returnredMoney;
}if(errorNum >ERROR_MAX_NUM) {//隨機金額產生錯誤次數超過上限,返回最小值
returnSINGLE_RED_MIN_MONEY;
}//每個紅包最大金額 = 剩余總金額 / 未分配金額紅包數量 * 紅包放大倍數
int avgRedMaxMoney = redMoney.divide(new BigDecimal(num), ROUNDING_MODE).multiply(TIMES).intValue() *FRACTION_LENGTH;
BigDecimal curRedMoney= new BigDecimal(random.nextInt(avgRedMaxMoney) * 1.00 / FRACTION_LENGTH + "").setScale(SCALE, ROUNDING_MODE);if(curRedMoney.compareTo(SINGLE_RED_MIN_MONEY) == -1) {//紅包最小值判斷:小于最小紅包金額,重新計算
return fightLuckRedPacked(redMoney, num, random, ++errorNum);
}/*if(curRedMoney.compareTo(SINGLE_RED_MAX_MONEY) == 1) {
//紅包最大值判斷
return fightLuckRedPacked(curRedMoney, num, random, ++errorNum);
}*/
//最少保留紅包金額
BigDecimal surplusMinRedMoney = SINGLE_RED_MIN_MONEY.multiply(new BigDecimal(num - 1));//除當前紅包剩余金額
BigDecimal surplusRedMoney =redMoney.subtract(curRedMoney);if(surplusMinRedMoney.compareTo(surplusRedMoney) == 1) {return fightLuckRedPacked(redMoney, num, random, ++errorNum);
}returncurRedMoney;
}public static voidmain(String[] args) {
System.out.println(SplitRedPackes(new BigDecimal("100"), 20));
}
}
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的Java红包退款_java 红包规则的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 本地生活JAVA版本_赶集生活java版
- 下一篇: java找到项目下的某个文件夹_serv