-2

我正在尝试运行一个特定的模拟,我实现了一些代码,但结果不是我期望的,我需要生成具有 10 个小数位的随机统一(范围从 0 到 1)数字(为了转换在其他发行版中)。示例:0,0345637897、0,3445627876、0,9776428487

这是代码:

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

3 回答 3

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 之间的整数,然后使用默认区域性将其转换为双精度(在 0 ... 1.0 范围内)。

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

return double.Parse(String.Format("0.{0}", next), CultureInfo.Invariant);
于 2013-05-09T20:51:18.000 回答
0

您是否正在寻找填充输出?因为你可以做到这一点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()
于 2013-05-09T20:44:19.277 回答
-1

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

请参阅这篇文章:为什么要使用 C# 类 System.Random 而不是 System.Security.Cryptography.RandomNumberGenerator?

于 2013-05-09T20:46:46.837 回答