用10位小数模拟的统一随机数

时间:2013-05-09 20:41:34

标签: c# random uniform

我想要运行一个特定的模拟,我已经实现了一些代码,但结果不是我期待的那个,我需要生成随机统一(范围从0到1)数字,小数点后10位(在为了转换其他分布中的那个)。示例:0,0345637897,0,3445627876,0,9776428487

这是代码:

double next = r.Next(1000000000, 9999999999);
return double.Parse(String.Format("0.{0}", next));

3 个答案:

答案 0 :(得分:3)

这应该足够了:

double v = Math.Round(myRandom.NextDouble(), 10);

0.1230.1230000000之间的差异是格式问题,请参阅@SamIAm的答案。


编辑后:

double next = r.Next(1000000000, 9999999999);
return double.Parse(String.Format("0.{0}", next));

这是在1000000000和9999999999之间获得整数,然后使用默认文化将其转换为double(在0 ... 1.0范围内)。

由于您似乎使用逗号(,)作为小数分隔符,至少使用

return double.Parse(String.Format("0.{0}", next), CultureInfo.Invariant);

答案 1 :(得分:0)

您是否希望填充输出?因为你可以用String.Format()

来做到这一点
string s = String.Format({0:0000000000}, i);

您也可以使用double或float

string s = String.Format("{0:0.0000000000}", d);

如果您需要一个随机的双倍,只需制作一个,并在打印时用10个小数位填充它。

Random random = new Random();
double d = random.NextDouble()

答案 2 :(得分:-1)

我建议使用RNGCryptoServiceProvider。它将产生高质量的随机数

请参阅此帖子:Why use the C# class System.Random at all instead of System.Security.Cryptography.RandomNumberGenerator?