2013-07-22 35 views
8

Tôi đang tìm một số mã C# ngắn gọn, hiện đại để tạo số ngẫu nhiên kép giữa 1.414213.14159. nơi số phải là định dạng [0-9]{1}.[0-9]{5}.Ngẫu nhiên đôi giữa các số đã cho

Tôi đang suy nghĩ một số giải pháp sử dụng Enumerable.Range bằng cách nào đó có thể làm cho điều này gọn gàng hơn.

+1

Bạn đang yêu cầu cho một số thập phân nhưng câu trả lời cung cấp cho bạn nhiều cách khác nhau để tạo ra số đôi ngẫu nhiên. Nếu bạn đang tìm kiếm một số thập phân ngẫu nhiên [this] (http://stackoverflow.com/questions/609501/generating-a-random-decimal-in-c-sharp) có thể hữu ích. –

+0

@MechanicalObject ở quy mô này và độ chính xác không có sự khác biệt giữa 'double' và' decimal', cả hai hệ thống có thể đại diện cho tất cả 6 chữ số trong phạm vi đó. –

+0

@ScottChamberlain: Vâng, tôi biết điều này cảm ơn bạn. Nhưng những gì tôi không biết là nếu dotnetandsqldevelop đã giới hạn số sau '.' vì lợi ích của câu hỏi hay không. 3.14159 có vẻ như PI và cho rằng anh ta đã yêu cầu thập phân, tôi nghĩ rằng liên kết có thể hữu ích. –

Trả lời

17

Bạn có thể dễ dàng xác định một phương thức trả về một số ngẫu nhiên giữa hai giá trị:

private static readonly Random random = new Random(); 

private static double RandomNumberBetween(double minValue, double maxValue) 
{ 
    var next = random.NextDouble(); 

    return minValue + (next * (maxValue - minValue)); 
} 

Sau đó bạn có thể gọi phương pháp này với các giá trị mong muốn của bạn:

RandomNumberBetween(1.41421, 3.14159) 
+8

OP yêu cầu số thập phân –

9

Sử dụng một cái gì đó như thế này.

Random random = new Random() 
int r = random.Next(141421, 314160); //+1 as end is excluded. 
Double result = (Double)r/100000.00; 
+0

số thập phân là bắt buộc. Ngoài ra nếu bạn sẽ có '1,5' nó sẽ không được trong [0-9] {1}. [0-9] {5} định dạng –

+0

@lazyberezovsky nó là, bởi vì nó là một bộ phận đôi. Ofc. việc định hình cần được thực hiện theo yêu cầu. – dognose

+1

Tôi nghĩ rằng OP đang đề cập đến [số thập phân này] (https://en.wikipedia.org/wiki/Decimal) không phải [số thập phân] (http://msdn.microsoft.com/en-us/library/system .decimal.aspx) –

5
Random r = new Random(); 
var number = r.Next(141421, 314160)/100000M; 

Ngoài ra, bạn không thể ép buộc số thập phân để phù hợp với mô hình của bạn. Ví dụ. nếu bạn có số 1.5, số này sẽ không khớp với định dạng 1.50000. Vì vậy, bạn nên định dạng cho kết quả như chuỗi:

string formattedNumber = number.ToString("0.00000"); 
+0

giữa 1.41421 và 3.14159 – dognose

+0

@ cảm nhận ah. Tôi nghĩ rằng nó phải phù hợp với [0-9] {1}. [0-9] {5} định dạng –

+0

'System.Decimal' có thể có dấu 0. Ví dụ với 'var x = 1.50000M;' cuộc gọi 'x.ToString()' ** sẽ ** trả về '" 1.50000 "'. Có lẽ sự phân chia '150000/100000M' thậm chí còn cho các số không? –

0

Tôi đã sử dụng tính năng này. Tôi hi vọng cái này giúp được.

Random Rnd = new Random(); 

double RndNum = (double)(Rnd.Next(Convert.ToInt32(LatRandMin.Value), Convert.ToInt32(LatRandMax.Value)))/1000000; 
-1

Kiểm tra các liên kết sau để triển khai làm sẵn mà sẽ giúp:

MathNet.Numerics, Random Numbers and Probability Distributions

Sự phân bố rộng đặc biệt quan tâm, được xây dựng trên đầu trang của Máy phát điện số ngẫu nhiên (MersenneTwister, vv .) trực tiếp bắt nguồn từ System.Random, tất cả cung cấp các phương thức mở rộng tiện dụng (ví dụ: NextFullRangeInt32, NextFullRangeInt64, NextDecimal, vv). Bạn có thể, tất nhiên, chỉ cần sử dụng SystemRandomSource mặc định, mà chỉ đơn giản là System.Random được tô điểm bằng các phương thức mở rộng.

Ồ, và bạn có thể tạo các cá thể RNG làm chủ đề an toàn nếu bạn cần.

Rất tiện dụng thực sự!

+0

câu trả lời này không tốt lắm, liên kết đã chết. –

0

đây giải pháp của tôi, nó không đẹp nhưng nó hoạt động tốt

Random rnd = new Random(); double num = Convert.ToDouble(rnd.Next(1, 15) + "." + rnd.Next(1, 100)); Console.WriteLine(num); Console.ReadKey();

0
JMH BJHBJHHJJ const int SIZE = 1; 
     int nnOfTosses, 

      headCount = 0, tailCount = 0; 
     Random tossResult = new Random(); 

     do 
     { 
      Console.Write("Enter integer number (>=2) coin tosses or 0 to Exit: "); 
      if (!int.TryParse(Console.ReadLine(), out nnOfTosses)) 
      { 
       Console.Write("Invalid input"); 
      } 
      else 
      { 

       //***////////////////// 
       // To assign a random number to each element 
       const int ROWS = 3; 
       double[] scores = new double[ROWS]; 
       Random rn = new Random(); 

       // Populate 2D array with random values 
       for (int row = 0; row < ROWS; row++) 
       { 
        scores[row] = rn.NextDouble(); 
       } 
       //***////////////////////////// 

       for (int i = 0; i < nnOfTosses; i++) 
       { 

        double[] tossResult = new double[i]; 
        tossResult[i]= tossResult.nextDouble(); 

       } 
       Console.Write("Number of Coin Tosses = " + nnOfTosses); 
       Console.Write("Fraction of Heads = "); 
       Console.Write("Fraction of Tails = "); 
       Console.Write("Longest run is "); 
      } 
     } while (nnOfTosses != 0); 

     Console.ReadLine(); 
Các vấn đề liên quan