2013-07-22 23 views
8

私は、1.414213.14159の間のランダムな倍数を生成するために、簡潔で現代的なC#コードを探しています。番号は[0-9]{1}.[0-9]{5}形式でなければなりません。与えられた数の間のランダムなdouble

私は、Enumerable.Rangeを利用した解決策が、これをより簡潔にすると考えています。

+1

動作しますが、答えはあなたにランダムな二重の数字を生成するためのさまざまな方法を与えます。あなたがランダムな10進数を探しているなら、[this](http://stackoverflow.com/questions/609501/generating-a-random-decimal-in-c-sharp)が役に立ちます。 –

+0

@MechanicalObjectこのスケールと精度では、 'double'と' decimal'の間に違いはありません。両方のシステムは、その範囲内の6桁の数字をすべて表すことができます。 –

+0

@ScottChamberlain:はい、ありがとうございます。しかし、私が知らないのは、dotnetandsqldevelopが '。質問のためかどうかは分かりません。 3.14159はPIのように思えるし、小数点を求めたという事実を考えれば、リンクが役に立つかもしれないと思った。 –

答えて

17

あなたは簡単に2つの値の間の乱数を返すメソッドを定義することができます。

private static readonly Random random = new Random(); 

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

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

次に、あなたの希望する値でこのメソッドを呼び出すことができます。

RandomNumberBetween(1.41421, 3.14159) 
+8

OPは小数点を尋ねます –

9

このようなものを使用してください。

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

10進数が必要です。また、あなたが '1.5'を持っている場合、それは[0-9] {1}には入りません。[0-9] {5} format –

+0

@lazyberezovskyそれは二重除算なのでです。 Ofc。必要に応じて書式設定を行う必要があります。 – dognose

+1

私はOPが[this decimal](https://en.wikipedia.org/wiki/Decimal)ではなく[the decimal](http://msdn.microsoft.com/en-us/library/system)を参照していると思います.decimal.aspx) –

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

また、あなたはあなたのパターンに一致するように小数を強制することはできません。例えば。 1.5の場合は1.50000と一致しません。だから、あなたは文字列として結果フォーマットする必要があります。

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

〜1.41421と3.14159 – dognose

+0

@ dognoseああありがとう。 [0-9] {1}と一致するはずです。[0-9] {5} format –

+0

'System.Decimal'は末尾のゼロを持つことができます。たとえば、 'var x = 1.50000M;で' 'x.ToString()' **は '' 1.50000 "'を返します。おそらく、部門「150000/100000M」は末尾のゼロを与えるでしょうか? –

0

これを使用しました。私はこれが役立つことを願っています

Random Rnd = new Random(); 

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

助けるべき既製の実装については、以下のリンクチェックアウト:乱数ジェネレータ(メルセンヌ・ツイスタなどの上に構築された

MathNet.Numerics, Random Numbers and Probability Distributions

広範な分布は特に興味深いものであるが、 。)直接System.Randomから派生し、すべて便利な拡張メソッド(例:NextFullRangeInt32、NextFullRangeInt64、NextDecimalなど)を提供します。もちろん、デフォルトのSystemRandomSourceを使用することもできます。これは、System.Randomを拡張メソッドで補完したものです。

ああ、必要に応じて、RNGインスタンスをスレッドセーフとして作成することができます。

本当に便利です!ここ

+0

この回答はあまり良くありません、リンクは死んでいます。 –

0

私の解決策は、それはかなりではないのですが、それはあなたが小数を求めているだけでなく

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();