我想要运行一个特定的模拟,我已经实现了一些代码,但结果不是我期待的那个,我需要生成随机统一(范围从0到1)数字,小数点后10位(在为了转换其他分布中的那个)。示例:0,0345637897,0,3445627876,0,9776428487
这是代码:
double next = r.Next(1000000000, 9999999999);
return double.Parse(String.Format("0.{0}", next));
答案 0 :(得分:3)
这应该足够了:
double v = Math.Round(myRandom.NextDouble(), 10);
0.123
和0.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。它将产生高质量的随机数