2013-07-22 12 views
8

Poszukuję jakiegoś zwięzłego, nowoczesnego kodu C# do wygenerowania losowej podwójnej liczby między 1.41421 i 3.14159. gdzie numer powinien być w formacie [0-9]{1}.[0-9]{5}.Losowe podwojenie między podanymi liczbami

Myślę, że niektóre rozwiązania, które wykorzystują Enumerable.Range, mogą uczynić to bardziej zwięzłym.

+1

Pytasz o przecinku ale odpowiedzi daje różne sposoby generowania liczb losowych podwójnych. Jeśli szukasz losowej liczby dziesiętnej [this] (http://stackoverflow.com/questions/609501/generating-a-random-decimal-in-c-sharp) może pomóc. –

+0

@MechanicalObject w tej skali i precyzji nie ma różnicy między "podwójnym" i "dziesiętnym", oba systemy mogą reprezentować wszystkie sześciocyfrowe liczby w tym zakresie. –

+0

@ScottChamberlain: Tak, znam to dzięki. Ale nie wiem, czy dotnetandsqldevelop ograniczył liczby po "." na pytanie, czy nie. 3.14159 wydaje się być PI i biorąc pod uwagę fakt, że poprosił o dziesiętne, myślałem, że link może być użyteczny. –

Odpowiedz

17

można łatwo określić metodę, która zwraca liczbę losową między dwiema wartościami:

private static readonly Random random = new Random(); 

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

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

Można połączyć tę metodę z żądanych wartości:

RandomNumberBetween(1.41421, 3.14159) 
+8

OP poprosił o dziesiętną –

9

Użyj czegoś takiego.

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

liczba dziesiętna jest wymagana. Także jeśli będziesz miał "1.5", to nie będzie w [0-9] {1}. [0-9] {5} format –

+0

@lazyberezovsky jest, ponieważ jest to podwójny podział. Ofc. formowanie musi być wykonane w razie potrzeby. – dognose

+1

Myślę, że OP odnosi się do [tego dziesiętnego] (https://en.wikipedia.org/wiki/Decimal) nie [to dziesiętne] (http://msdn.microsoft.com/en-us/library/system .decimal.aspx) –

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

Również nie można zmusić liczbę dziesiętną, aby dopasować swój wzór. Na przykład. jeśli masz numer 1.5, nie będzie on zgodny z formatem 1.50000. Więc należy sformatować wynik jako wyrażenie:

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

między 1,41421 a 3,14159 – dognose

+0

@dognose ah thanks. Myślałem, że powinien pasować [0-9] {1}. [0-9] {5} format –

+0

'System.Decimal' może mieć końcowe zera. Na przykład z 'var x = 1.50000M;' wywołanie 'x.ToString()' ** spowoduje ** powrót '" 1.50000 "'. Może podział "150000/100000M" daje nawet końcowe zera? –

0

Użyłem tego. Mam nadzieję, że to pomoże.

Random Rnd = new Random(); 

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

Sprawdź poniższego linku do gotowych implementacji, które powinny pomóc:

MathNet.Numerics, Random Numbers and Probability Distributions

Rozległe dystrybucje są szczególnie interesujące, zbudowany na szczycie Random Number Generatory (Mersenne Twister, etc .) bezpośrednio wyprowadzone z System.Random, wszystkie zapewniające przydatne metody rozszerzenia (np. NextFullRangeInt32, NextFullRangeInt64, NextDecimal, itp.). Możesz oczywiście użyć domyślnego SystemRandomSource, który jest po prostu System.Random upiększony metodami rozszerzenia.

Och, i możesz utworzyć instancje RNG jako bezpieczne dla wątków, jeśli ich potrzebujesz.

Bardzo przydatny!

+0

ta odpowiedź nie jest tak dobra, link jest martwy. –

0

tutaj moje rozwiązanie, to nie jest ładne, ale to działa dobrze

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(); 
Powiązane problemy