两个数之间取随机数

文章探讨了如何在Java中生成两个小数之间(包含最大和最小值)的随机数,适合红包等场景。指出直接使用Math.random()方法会有概率问题,最大和最小值的概率仅为中间值的一半。推荐将数值转换为最小单位进行计算,以确保概率均等。

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

关于这篇文章简单做个介绍,在网上大部分都是 整数之间的随机数,然而对我来说根本没有用。

由于公司需求做发送红包的随机数,并且包含最大和最小金额。关于钱来说是有小数的。所以就面临对小数取随机数。

目前来说有两种方式,一个就是把单位元转换为分,就成了整数之间的取整,这个就不说了。

还有就是之间在两个小数点之间的书取整。之间上代码

	public static void main(String[] args) {
		BigDecimal minPice = new BigDecimal("11.1100").setScale(2,BigDecimal.ROUND_DOWN);
		BigDecimal maxPice = new BigDecimal("11.2255").setScale(2,BigDecimal.ROUND_DOWN);
		List<BigDecimal> list = new ArrayList<BigDecimal>();
		for (int i = 0; i < 10000; i++) {
			BigDecimal random = new BigDecimal(Math.random());
            //这个就是取出的随机数。其他只是为了测试概率是否一样。最后结果保留两位小数,这只是为了测试最大值和最小值
			BigDecimal randomPice = minPice.add(
					random.multiply(maxPice.subtract(minPice)));
			list.add(randomPice);
		}
		Collections.sort(list);
		Map<BigDecimal,Integer> map = new TreeMap<BigDecimal,Integer>();
		for (BigDecimal in
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值