Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 四个不同区间的随机双精度_C#_Random - Fatal编程技术网

C# 四个不同区间的随机双精度

C# 四个不同区间的随机双精度,c#,random,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#中,我怎么能这样随机呢?这取决于您想要的精度,我假设精度是0.001,请尝试以下代码: var

根据我在应用程序中的需要,我需要生成范围为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#中,我怎么能这样随机呢?

这取决于您想要的精度,我假设精度是
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;

这取决于您想要的精度,我假设精度为
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;

第一点很简单,这是从
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建议类似的方法,使用足够大的数字满足您的需要:

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

(使用INT可以获得31位精度。如果需要更多精度,则需要使用
NextBytes
获得8个字节,可以将其转换为长字节。)

第一点很简单,这就是
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建议类似的方法,使用足够大的数字满足您的需要:

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

(使用INT可以获得31位精度。如果需要更多精度,则需要使用
NextBytes
获得8个字节,可以转换为长字节。)

我已编辑了您的标题。请参见“”,其中的共识是“不,他们不应该”。如果你正在创建一个
双精度
随机数,出现零或一的几率非常小。你到底想做什么?关于@Scony如何?你提出的问题并没有讨论结果的开/闭区间…@Alexei Levenkov-对,但它展示了方法。若你们理解这个方法,那个么打开/关闭的时间间隔是微不足道的。我已经编辑了你们的标题。请参见“”,其中的共识是“不,他们不应该”。如果你正在创建一个
双精度
随机数,出现零或一的几率非常小。你到底想做什么?关于@Scony如何?你提出的问题并没有讨论结果的开/闭区间…@Alexei Levenkov-对,但它展示了方法。若您理解这个方法,那个么打开/关闭的时间间隔是微不足道的