日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

java红包算法·返回ListDouble

發(fā)布時(shí)間:2024/8/26 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java红包算法·返回ListDouble 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

/*紅包處理過程中出現(xiàn)0.00以后的尾數(shù)處理辦法。

先獲取List<Double>數(shù)據(jù)可由red(int number, double total, double min) 獲取。

獲取后用red_all_count(List<Double> red_all_count)可以獲取總金額,進(jìn)行一個(gè)對(duì)比,紅包數(shù)少誤差小,生成的紅包數(shù)越多,誤差可能越大。

*/

//測(cè)試

public static void main(String[] args) {
List<Double> ld=red(1000, 5000, 0.01);
red_all_count(ld);
}

/**
* @param red_all_count
* @return 總金額
*/
public static double red_all_count(List<Double> red_all_count){
double dou=0.0;
for (Double double1 : red_all_count) {
dou+=double1;
}
BigDecimal bg = new BigDecimal(dou);
? ?double d3 = bg.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
return d3;
}


/**

* @param 總份數(shù):number
* @param 總金額:total
* @param 最小金額:min
* return doubleList
*/
public static List<Double> red(int number, double total, double min) {

// 紅包數(shù)
// 紅包總額
double money;
// 最小紅包
double max;
int i = 1;
List<Double> list = new ArrayList<Double>();
if (number == 1) {
list.add(total);
return list;
}
DecimalFormat df = new DecimalFormat("###.##");
while (i < number) {
// 保證即使一個(gè)紅包是最大的了,后面剩下的紅包,每個(gè)紅包也不會(huì)小于最小值
max = total - min * (number - i);
int k = (int) (number - i) / 2;
// 保證最后兩個(gè)人拿的紅包不超出剩余紅包
if (number - i <= 2) {
k = number - i;
}
// 最大的紅包限定的平均線上下
max = max / k;
// 保證每個(gè)紅包大于最小值,又不會(huì)大于最大值
money = (int) (min * 100 + Math.random()
* (max * 100 - min * 100 + 1));
money = (float) money / 100;
// 保留兩位小數(shù)
money = Double.parseDouble(df.format(money));
if(money<0.01){
money=DoubleUtil.changeDoubleTwo(min);
}
total = (int) (total * 100 - money * 100);
total = total / 100;
System.out.println("剩余金額:"+total+",本次生成紅包:"+DoubleUtil.changeDoubleTwo(money));
list.add(money);
i++;
// 最后一個(gè)人拿走剩下的紅包
if (i == number) {

list.add(total);

System.out.println("剩余金額:"+total+",本次生成紅包:"+DoubleUtil.changeDoubleTwo(money));

}
}
// 取數(shù)組中最大的一個(gè)值的索引

return list;

}

總結(jié)

以上是生活随笔為你收集整理的java红包算法·返回ListDouble的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。