求助生成随机数……[0,1]

ygsumo 2016-08-12 09:42:41
想生成一个[0,1]的随机数,但是random自带的nextDouble()只包括[0,1)
请问大神们有没有办法包括后面的1?
...全文
352 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
HerveyHall 2016-08-16
  • 打赏
  • 举报
回复
考虑到概率的问题可以使用
Math.random()*1.0000000000000003
Math.random()*1.0000000000000002
因为double类型的计算结果保存15~16位小数,所以Math.random()的最大值输出结果应该是0.9999999999999999。而0.9999999999999999*1.0000000000000003和0.9999999999999999*1.0000000000000002的输出结果都是1.0,所以求出的随机数区间就是无限近似[0,1],而输出值的区间就是[0,1],这样不会有1的生成概率变大的问题,事实上生成1.0的概率是微乎其微的。java.util.Random类的nextDouble()方法同理。
codingjav 2016-08-14
  • 打赏
  • 举报
回复
引用 6 楼 tao20dage 的回复:
random.nextDouble(2),筛掉大于1 的
double nextDouble()刚好可以哎
QiaoDog 2016-08-14
  • 打赏
  • 举报
回复
random.nextDouble(2),筛掉大于1 的
weixin_35722556 2016-08-13
  • 打赏
  • 举报
回复
import java.util.*;
class Random0to1
{
	public static void main(String[] args) 
	{
		Random r = new Random();
		double d =0.1;
		for(int i=0;i<100000;i++)
		{
			d = r.nextDouble();
			if(d>0.9999)
				System.out.println(1);
			else 
				System.out.println(new Random().nextDouble());
		}
	}
}
NewMoons 2016-08-13
  • 打赏
  • 举报
回复

Random random = new Random();
		for(int i=0;i<100000;i++){
			double dou = random.nextDouble();
			//这个0.9999由你根据需要来控制其出现的几率。
			if(dou >= 0.9999){
				dou = 1.0;
				System.out.println(dou);
			}
		}
ygsumo 2016-08-13
  • 打赏
  • 举报
回复
引用 1 楼 qq_34034791 的回复:
random.nextInt(2) 就是0-1的随机数了
random.nextInt只会生成整数型,然而我需要double的,也就是0-1之间的所有小数,所以这个方法应该是不行的。。
捉蝉 2016-08-13
  • 打赏
  • 举报
回复
楼上的方法好 我最开始的思路是生成随机小数兵四舍五入
昕火燎原 2016-08-13
  • 打赏
  • 举报
回复
random.nextInt(2) 就是0-1的随机数了

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧