BigDecimal演算微信お年玉アルゴリズム

5947 ワード

微信のお年玉の配分:お年玉の金額はどう計算しますか?どうして各お年玉の金額が大きく異なるのですか?
答え:答えは完全にランダムで、額は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());
}