Java版 微信红包算法

原创
2015/12/09 22:09
阅读数 569

直接上代码。

 private double[] divide(double totalMoney,int num,double minMoney){
        double[] each = new double[num];
        for(int i=0;i<num-1;i++){
            //计算最大安全值,保证不会超出  。如果安全值越大,价格波动越大  .建议是平均值
            double maxSafeMoney = (totalMoney - (num-1-i)*minMoney) / (num-1-i);
            //随机算出最小值,保证不低于最小值
            each[i] = Math.random()*(maxSafeMoney-minMoney)+minMoney;
            //计算当前剩下的钱
            totalMoney = totalMoney - each[i];
        }
        each[num-1] = totalMoney;
        return each;
    }

    @Test
    public void test3(){
        double[] rs = divide(200,10,0.01);
        for(double each:rs){
            System.out.format("%.2f\n",each);
        }
    }

结果:

16.70
21.37
18.89
12.13
11.35
23.21
24.32
7.39
14.10
50.57


展开阅读全文
打赏
0
25 收藏
分享
加载中
凉粉博主

引用来自“zonghua”的评论

不是说钱不能用double吗

恩,double float 有一个精度问题,正确的推荐使用BigDeciaml 。不过这个类用起来比较麻烦,所以我就用double 直接写出来方便理解。
2015/12/15 21:49
回复
举报
不是说钱不能用double吗
2015/12/10 00:53
回复
举报
更多评论
打赏
2 评论
25 收藏
0
分享
返回顶部
顶部