如何在Java中生成(min, max]区间的随机double类型数值?
生成 (min, max] 区间的随机double值
要生成**(min, max]**区间的随机double类型数值,你可以基于原有的公式做简单变换:
原代码生成的是[min, max),核心是Math.random()返回[0, 1)区间的数值。如果我们把这个随机值反转,就能得到(0, 1]区间的结果,再映射到目标区间即可。
直接可用的代码:
double num = max - Math.random() * (max - min);
或者等价的写法:
double num = min + (max - min) * (1 - Math.random());
原理说明
Math.random()返回[0, 1),因此Math.random() * (max - min)的范围是[0, max - min)- 用
max减去这个值,得到的范围就是(max - (max - min), max],也就是(min, max]
对于浮点数来说,Math.random() 返回恰好0的概率极低,几乎可以忽略,所以这个实现完全符合你对开区间起点、闭区间终点的需求。
内容的提问来源于stack exchange,提问作者swamp
相关产品推荐
相关产品推荐

