获取随机金额:上限下限都要取到

本文介绍了一种用于生成介于最大值和最小值之间的随机金额的算法。提供了两种实现方式:一种生成二位小数,另一种生成整数。此外,还分享了一个同事编写的随机数生成方法,使用了BigDecimal进行精确计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、随机金额为最大值与最小值之间的二位小数

/**
	 * 获取随机券金额
	 * 随机金额为最大值与最小值之间的二位小数。
	 * @param maxValue,minValue
	 * @return newrandomNum
	 */
	private BigDecimal getValue(BigDecimal maxValue ,BigDecimal minValue){
		double randomNum =  Math.round((Math.random()*(maxValue.doubleValue() - minValue.doubleValue()) + minValue.doubleValue()) * 100);
		DecimalFormat dfm = new DecimalFormat ("00");
		String newrandomNum = dfm.format(randomNum);
		return BigDecimal.valueOf(Double.parseDouble(newrandomNum)).divide(new BigDecimal(100));
	}

	public static void main(String[] args) {
	    Map<BigDecimal, Integer> map = new HashMap<BigDecimal, Integer>();

		BigDecimal maxValue = new BigDecimal(8);
		BigDecimal minValue = new BigDecimal(3);

		for(int i=0; i<10000; i++){
            BigDecimal b = new BaseSendCouponServiceImpl().getValue(maxValue,minValue);

            if(map.get(b) == null){
                map.put(b, 1);
            } else {
                map.put(b, map.get(b) + 1);
            }

		}

		for(Map.Entry entry:map.entrySet()) {
            System.out.println(entry.getKey() + "   " + entry.getValue());
        }
	}

  

2、随机金额为最大值与最小值之间的整数

private BigDecimal getValue(BigDecimal maxValue ,BigDecimal minValue){
		double randomNum =  Math.round((Math.random()*(maxValue.doubleValue() - minValue.doubleValue()) + minValue.doubleValue()));
		DecimalFormat dfm = new DecimalFormat ("00");
		String newrandomNum = dfm.format(randomNum);
		return BigDecimal.valueOf(Double.parseDouble(newrandomNum));
	}

	public static void main(String[] args) {
	    Map<BigDecimal, Integer> map = new HashMap<BigDecimal, Integer>();

		BigDecimal maxValue = new BigDecimal(8);
		BigDecimal minValue = new BigDecimal(3);

		for(int i=0; i<100000; i++){
            BigDecimal b = new BaseSendCouponServiceImpl().getValue(maxValue,minValue);

            if(map.get(b) == null){
                map.put(b, 1);
            } else {
                map.put(b, map.get(b) + 1);
            }

		}

		for(Map.Entry entry:map.entrySet()) {
            System.out.println(entry.getKey() + "   " + entry.getValue());
        }
	}

 

3、同事写的

public static BigDecimal getRandomValueBetween(BigDecimal maxValue, BigDecimal minValue) {

if (maxValue == null || minValue == null) {
return BigDecimal.ZERO;
}

BigDecimal factor = new BigDecimal(new Random().nextInt(101) ).divide(new BigDecimal(100.00));
BigDecimal randomNum = factor.multiply(maxValue.subtract(minValue).add(minValue)).setScale(1, BigDecimal.ROUND_HALF_UP);
return randomNum;
}

  

 

转载于:https://www.cnblogs.com/time-on/p/9761516.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值