让你设计一个微信发红包的api,你会怎么设计,不能有人领到的红包里面没钱,红包数值精确到分。

本文探讨如何设计一个确保每个用户领取的微信红包中都包含精确到分的金额,避免出现空红包的API。我们将考虑并发处理、随机分配算法以及金额公平性的实现策略。
摘要由CSDN通过智能技术生成
public class Hongbao {

    public static double getRandomMoney(Redpackage redpackage){
        if (redpackage.redpackage_size == 1){
            redpackage.redpackage_size--;
            return (double) Math.round(redpackage.redpackage_money*100)/100;
        }

        Random r = new Random();
//      设置每次发红包的最小值
        double min = 0.01;
//      控制当前发红包的最大值
        double max = redpackage.redpackage_money/redpackage.redpackage_size * 2;
//      用随机数与当前发红包的最大钱数相乘,算出当前要发的红包
        double money = r.nextDouble() * max;
//      如果当前发红包的钱小于0.01则,赋值为0.01(规范当前红包最小值)
        money = money <= min?0.01:money;
//      统计为小数点后两位
        money = Math.floor(money*100)/100;
        redpackage.redpackage_size--;
        redpackage.redpackage_money -= money;
//      发红包
        return money;

    }



    static class Redpackage{

        double redpackage_money ;
        double redpackage_size ;

        Redpackage (double redpackage_money,double redpackage_size){

            this.redpackage_money = redpackage_money;
            this.redpackage_size = redpackage_size;
        }
    }

    public static void main(String[] areg){

        double  redpackage_money = 100;
        double redpackage_size = 10;

        Redpackage redpackage = new Redpackage(redpackage_money,redpackage_size);

        Hongbao Hongbao = new Hongbao();

        for(int i=1;i <= 10;i++){

            double money = Hongbao.getRandomMoney(redpackage);
            System.out.println(money);

        }
    }
}
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值