四个不同区间随机加倍

时间:2013-12-03 02:49:07

标签: c# random

根据我在我的应用程序中的需要,我需要生成从0到1的数字,但稍加修改:

1. Range [0,1) : include 0 but not 1
2. Range (0, 1) : not include 0 nor 1
3. Range (0, 1] : same as 1. include 1 but not 0
4. Range [0,1]: include both 0 and 1

在C#中,我怎么能像这样随意?

2 个答案:

答案 0 :(得分:3)

第一个很简单,那就是从NextDouble方法返回的内容;

Random rnd = new Random();
double number = rnd.NextDouble();

要排除零,请在获得零时选择一个新数字:

double number;
do {
  number = rnd.NextDouble();
} while(number == 0.0);

要包括1但不包括0,从1减去随机数:

double number = 1.0 - rnd.NextDouble();

要同时包含0和1,您可以采用与King King建议类似的方法,并根据您的需要提供足够大的数字:

double number = (double)rnd.Next(Int32.MaxValue) / (Int32.MaxValue - 1);

(使用int,你可以得到31位精度。如果你需要更多,你需要使用NextBytes来获得8个字节,你可以变成长。)

答案 1 :(得分:2)

这取决于你想要的精度,我想精度为0.001,试试这段代码:

var rand = new Random();
//1
var next = (float) rand.Next(1000)/1000;
//2
var next = (float) rand.Next(1,1000)/1000;
//3
var next = (float) rand.Next(1,1001)/1000;
//4
var next = (float) rand.Next(1001)/1000;