首页 > 代码库 > 微信红包算法TEST
微信红包算法TEST
1、基本算法
设定总金额为10元,有N个人随机领取:
N=1
则红包金额=X元;
N=2
为保证第二个红包可以正常发出,第一个红包金额=0.01至9.99之间的某个随机数
第二个红包=10-第一个红包金额;
N=3
红包1=0.01至0.98之间的某个随机数
红包2=0.01至(10-红包1-0.01)的某个随机数
红包3=10-红包1-红包2
……
2、java代码
1 package Demo_1.Test_1; 2 3 import java.math.BigDecimal; 4 import java.util.Random; 5 6 /** 7 * @描述:微信红包算法TEST 8 * @author BrokenColor 9 * @date 2017年3月2日上午11:27:36 10 */ 11 public class WeixinHB { 12 13 double TOTAL = 10;//红包总金额 14 int NUM = 8;//抢红包人数 15 double MIN = 0.01;//每人最少分的金额 16 double safe_total ; 17 double money ; 18 Random rand = new Random(); 19 public void calculation(){ 20 for (int i = 1; i < NUM; i++) { 21 22 safe_total = (TOTAL-(NUM-i)*MIN)/(NUM-i);//计算安全上限 23 24 money = rand.nextDouble()*(safe_total-MIN)+MIN; 25 26 money =(double)Math.round(money*100)/100;//保留两位小数 27 28 //直接相减会有double数据类型相减的问题 29 TOTAL = this.sub(TOTAL, money); 30 31 System.out.println("第"+i+"次红包:"+money+"元,剩余:"+TOTAL+"元"); 32 } 33 System.out.println("第"+NUM+"次红包:"+TOTAL+"元,剩余:0元"); 34 } 35 //double 数相减 36 public double sub(double d1,double d2){ 37 BigDecimal bd1 = new BigDecimal(Double.toString(d1)); 38 BigDecimal bd2 = new BigDecimal(Double.toString(d2)); 39 return bd1.subtract(bd2).doubleValue(); 40 } 41 42 public static void main(String[] args) { 43 // TODO Auto-generated method stub 44 WeixinHB hb = new WeixinHB(); 45 hb.calculation(); 46 } 47 48 }
如有错误,望指出!
微信红包算法TEST
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。