BigDecimal演算微信お年玉アルゴリズム
5947 ワード
微信のお年玉の配分:お年玉の金額はどう計算しますか?どうして各お年玉の金額が大きく異なるのですか?
答え:答えは完全にランダムで、額は0.01と(残りの平均値x 2)の間にあります.例えば、100元で、全部で10個のお年玉を出すと、平均値は10元で、そのお年玉の額は0.01元~20元の間で変動します.前の3つのお年玉が全部で40元受け取ったとき、60元残って、全部で7つのお年玉が残っていると、この7つのお年玉の額は0.01~(60/7*2)=17.14の間にあります.
答え:答えは完全にランダムで、額は0.01と(残りの平均値x 2)の間にあります.例えば、100元で、全部で10個のお年玉を出すと、平均値は10元で、そのお年玉の額は0.01元~20元の間で変動します.前の3つのお年玉が全部で40元受け取ったとき、60元残って、全部で7つのお年玉が残っていると、この7つのお年玉の額は0.01~(60/7*2)=17.14の間にあります.
public static void cal(double money,int count){
BigDecimal totalDec = new BigDecimal(0);
BigDecimal moneyDec = new BigDecimal(money);
for(int i = 0;i<count;i++){
if(i != count -1){
//count
BigDecimal countDec = new BigDecimal(count-i);
// money*2/count money count
BigDecimal div = moneyDec.multiply(new BigDecimal(2))
.divide(countDec,2,5);
//
BigDecimal randomDec = new BigDecimal(Math.random()*(div.floatValue()))
.setScale(2,5);
//money
moneyDec = moneyDec.subtract(randomDec);
totalDec = totalDec.add(randomDec);
}else{
totalDec = totalDec.add(moneyDec);
}
}
System.out.println(totalDec.floatValue());
}