当前位置: 代码迷 >> 综合 >> 发放随机优惠券金额算法
  详细解决方案

发放随机优惠券金额算法

热度:13   发布时间:2023-11-01 03:54:55.0
/*** 依据红包数和红包总额* @param number 红包总数* @param total 红包总额* @param min 最小红包金额* @return 红包金额列表*/public static List<Float> createHongbaoAmount(int number, float total, float min ,float maxHongbao){float money;//红包金额float moneyFloat;//红包金额小数点double max;int i = 1;List<Float> math = new ArrayList<Float>();DecimalFormat df = new DecimalFormat("##0.00");while (i < number) {//保证即使一个红包是最大的了,后面剩下的红包,每个红包也不会小于最小值max = total - min * (number - i);int k = (int)(number - i) / 2;//保证最后两个人拿的红包不超出剩余红包if (number - i <= 2) {k = number - i;}//最大的红包限定的平均线上下max = max / k;//保证每个红包大于最小值,又不会大于最大值moneyFloat = (float) (min * 100 + Math.random() * (max * 100 - min * 100 + 1));moneyFloat = (float)moneyFloat / 100;//保留两位小数moneyFloat = Float.parseFloat(df.format(moneyFloat));if(moneyFloat<min){moneyFloat = min;}if(moneyFloat>maxHongbao){moneyFloat = maxHongbao;}total=(total - moneyFloat);//total = total/100;money = Float.parseFloat(String.valueOf(moneyFloat).substring(0,String.valueOf(moneyFloat).length()-2));math.add(moneyFloat);//log.info("the " + i + " get " + money  + ";left" + total);i++;//最后一个人拿走剩下的红包if (i == number) {money = Float.parseFloat(String.valueOf(total).substring(0,String.valueOf(total).length()-2));math.add(Float.parseFloat(df.format(money)));//log.info("the " + i + " get " + total  + ";left "+total);}}for(int j=0;j<math.size();j++){Float maxMath = Collections.max(math);if(maxMath>maxHongbao){int indexMax = math.indexOf(Collections.max(math));int indexMin = math.indexOf(Collections.min(math));math.set(indexMax, maxHongbao);math.set(indexMin, Collections.min(math) +maxMath-maxHongbao);}}float sumMath = 0;for(int j=0;j<math.size();j++){sumMath += math.get(j);}System.out.println("sumMath:"+sumMath);//取数组中最大的一个值的索引System.out.println("the " + (math.indexOf(Collections.max(math)) + 1) + " is max");return math;}

  相关解决方案