public static double getRandomMoney(LeftMoneyPackage _leftMoneyPackage) {
// remainSize 剩余的红包数量
// remainMoney 剩余的钱
if (_leftMoneyPackage.remainSize == 1) {
_leftMoneyPackage.remainSize--;
return (double) Math.round(_leftMoneyPackage.remainMoney * 100) / 100;
}
Random r     = new Random();
double min   = 0.01; //
double max   = _leftMoneyPackage.remainMoney / _leftMoneyPackage.remainSize * 2;
double money = r.nextDouble() * max;
money = money <= min ? 0.01: money;
money = Math.floor(money * 100) / 100;
_leftMoneyPackage.remainSize--;
_leftMoneyPackage.remainMoney -= money;
return money;
}

1. 所有答案都是“取时随机”，即设计“红包池”的概念，然后在抽取时随机取数。
2. 所有答案都是“钱的随机”，即随机金额，然后return。

/**
* @param count 红包数
* @param money 总金额
* @return
*/
public static Integer[] ranRedPac(Integer count, Integer money) {
Integer[] result = new Integer[count];
for (int i = 1; i <= money; i++) {
int n = new Random().nextInt(count);
result[n] = result[n] == null ? 1 : result[n] + 1;
}
return result;
}

//测试
public static void main(String[] args) {
Arrays.asList(ranRedPac(10, 5000000)).forEach(i -> System.out.println(i));
System.out.println("sum: " + Arrays.asList(ranRedPac(10, 50)).stream().mapToInt(i -> i).sum());
}