【java】模仿拼多多红包递减算法
该说不唠,直接上代码。可直接复制使用
package com.yuezhi.util;
import java.math.BigDecimal;
public class HongBaoUtils {
public static BigDecimal getOneRandomNumber(BigDecimal bd) {
Double number = bd.setScale(2, BigDecimal.ROUND_DOWN).doubleValue();
if (number >= 200) {
double db = (Math.random() * (190 - 150)) + 150;
BigDecimal bg = new BigDecimal(db);
return bg.setScale(2, BigDecimal.ROUND_DOWN);
} else if (number >= 1) {
return getOneRandomNumber(BigDecimal.valueOf(0), bd);
} else {
return new BigDecimal(0.01);
}
}
public static BigDecimal getOneRandomNumber(BigDecimal minBig, BigDecimal maxBig) {
double db = (Math.random() * (maxBig.subtract(minBig).setScale(2, BigDecimal.ROUND_DOWN).doubleValue()) + minBig.setScale(2, BigDecimal.ROUND_DOWN).doubleValue());
BigDecimal bg = new BigDecimal(db);
return bg.setScale(2, BigDecimal.ROUND_DOWN);
}
public static void main(String[] args) {
HongBaoUtils hongBaoUtils = new HongBaoUtils();
BigDecimal number = new BigDecimal(200);
int i =0;
while (number.doubleValue() > 0) {
i++;
BigDecimal oneRandomNumber = hongBaoUtils.getOneRandomNumber(number);
System.err.println("获取红包===>" + oneRandomNumber.setScale(2, BigDecimal.ROUND_DOWN));
System.out.println("剩余金额===>" + number.setScale(2, BigDecimal.ROUND_DOWN));
number = number.subtract(oneRandomNumber);
}
System.out.println("总共===>"+i);
}
}
如果觉得实用,就点个赞,感谢支持,不定期更新博文,感兴趣的可以点个关注。