2012-04-19 421 views
7

的类似:如何在C#中用8位数生成一个随机数? (4个整数,4小数部分)

1234.5678 
2345.6789 
3456.7890 

但不是:

123.4567 

现在我这样做:

double number = Math.Ceiling (random.NextDouble () * 10000000) * 0.001; 

但并不总是给我8位数字。

任何巧妙的技巧来做到这一点?

+1

鉴于存储为double,你真的应该使用十进制类型这个时候,绝大多数小数的还没有确切的表示。 – spender 2012-04-19 19:12:08

+0

重要的是它有均匀的分布? – Servy 2012-04-19 19:12:34

+0

@spender:你是什么意思?我只是将它们用作其他随机函数的播种器。这不是有效的吗? – 2012-04-19 19:14:46

回答

8

尝试random.Next(10000000, 99999999+1)/10000.0d;

编辑:增加了更多的787-9

EDIT2:固定的1个减去问题

EDIT3:增加了更多的0 ,我的答案如何得到如此高的评价?

+0

'var n = random.Next(min,max)'产生一个数字n,min <= n 2012-04-19 19:12:07

+0

是的,你是对的。 – Matthew 2012-04-19 19:12:35

+0

为了便于阅读,我建议使用类似'10 * 1000 * 1000'和'100 * 1000 * 1000'的东西,而不是重复0和9的广告恶心。 – 2012-04-19 19:15:35

1

生成8个单个随机数字,然后将它们连接在一起。这些

+1

需要解析步骤。慢。 – usr 2012-04-19 19:09:32

+2

@usr - 不需要解析。这一切都可以用数学来完成。 – 2012-04-19 19:11:36

+0

我不认为这将是统一的随机。 – Servy 2012-04-19 19:13:37

3

用途之一:

double number = Math.Ceiling(random.NextDouble() * 9000 * 10000 + 1000 * 10000) * 0.0001; 
double number = Math.Ceiling(random.NextDouble() * 90000000 + 10000000) * 0.0001; 
double number = random.Next(10000 * 10000/10, 10000 * 10000)/10000d; 
double number = random.Next(10000000, 100000000)/10000d; 
1
double number = random.Next(1000 * 1000, 1000 * 1000 * 10)/1000.0 
1
double rndNumber = new Random().NextDouble(); 
string testNumber = (rndNumber * 99999999).ToString("0000.0000"); 
2

是这样的吗?

Random r = new Random(); 
var item = r.Next(10000000, 100000000) * 0.0001m; 

每花费者的下面......解释,为什么你我使用十进制这里评论:

  1. 乔恩斯基特公开羞辱我们很多人在俄亥俄州他在Codemash会谈的一个选择双。
  2. 双人使用的时髦人士,和
  3. 十进制将防止使用双引入的精度问题。请记住,当你需要很多数字时,你应该使用double。如果您需要更少,但需要它们来保持准确性,请使用小数点。
+1

可能值得解释为什么你在这个计算中选择了小数。 – spender 2012-04-19 19:13:11

+0

完成。好点子。 – Robaticus 2012-04-19 19:25:41

0
double number = Double.Parse(r.Next(10000000, 99999999).ToString().Insert(4,".")); 
1
Random rnd = new Random(); 
int num1 = rnd.Next(1000,9999); 
int num2 = rnd.Next(1000,9999); 
Console.WriteLine(num1.ToString()+"."+num2.ToString());