因为企业付款最小金额是0.3元,所以生成的最小金额为三元
public class RedPackageUtil {
public static double MIN = 0.3;
public static void main(String... args) {
for (int i = 0; i < 1; i++) {
test();
}
}
public static void test() {
List<Double> hb = RedPackageUtil.hb(1, 3);
BigDecimal total = BigDecimal.ZERO;
for (Double d : hb) {
total = BigDecimalUtils.add(total, new BigDecimal(d));
}
System.out.println(total);
System.out.println(hb.size());
System.out.println(Arrays.toString(hb.toArray()));
}
/**
*
* @Description: 红包随机
* @param @param total 红包总金额
* @param @param num 红包数量
* @param @return
* @return List<Double>
* @throws
* @author Langyb
* @date 2019年3月26日
*/
public static List<Double> hb(double total, int num) {
double min = RedPackageUtil.MIN;
if (total < num * RedPackageUtil.MIN) {
throw new BusinessException("-1", "金额有误");
}
List<Double> result = new ArrayList<>(num);
for (int i = 1; i < num; i++) {
double safe_total = (total - (num - i) * min) / (num - i);
double random = Math.random();
double money = random * (safe_total - min) + min;
BigDecimal money_bd = new BigDecimal(money);
money = money_bd.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
if (money <= RedPackageUtil.MIN) {
money = RedPackageUtil.MIN;
}
total = total - money;
BigDecimal total_bd = new BigDecimal(total);
total = total_bd.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
result.add(money);
}
result.add(total);
return result;
}
}