我正在尝试运行一个特定的模拟,我实现了一些代码,但结果不是我期望的,我需要生成具有 10 个小数位的随机统一(范围从 0 到 1)数字(为了转换在其他发行版中)。示例:0,0345637897、0,3445627876、0,9776428487
这是代码:
double next = r.Next(1000000000, 9999999999);
return double.Parse(String.Format("0.{0}", next));
这应该足够了:
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 之间的整数,然后使用默认区域性将其转换为双精度(在 0 ... 1.0 范围内)。
由于您似乎使用逗号 ( ,
) 作为小数分隔符,因此至少使用
return double.Parse(String.Format("0.{0}", next), CultureInfo.Invariant);
您是否正在寻找填充输出?因为你可以做到这一点String.Format()
string s = String.Format({0:0000000000}, i);
你也可以用双精度或浮点数来做
string s = String.Format("{0:0.0000000000}", d);
如果您需要随机双精度,只需制作一个,并在打印时用小数点后 10 位填充。
Random random = new Random();
double d = random.NextDouble()
我建议使用 RNGCryptoServiceProvider。它将产生高质量的随机数
请参阅这篇文章:为什么要使用 C# 类 System.Random 而不是 System.Security.Cryptography.RandomNumberGenerator?