在 C# 中生成一個隨機浮點數
-
使用 C# 中的
Random.NextDouble()
函式在0
和1
之間生成隨機浮點數 -
使用 C# 中的
Random.NextDouble()
函式生成不帶範圍的隨機浮點數 -
使用 C# 中的
Random.NextDouble()
函式在特定範圍內生成隨機浮點數 -
在 C# 中使用
Random.NextBytes()
函式生成隨機浮點數
在本教程中,我們將討論在 C# 中生成隨機浮點數的方法。
使用 C# 中的 Random.NextDouble()
函式在 0
和 1
之間生成隨機浮點數
遺憾的是,沒有內建的方法可以在 C# 中生成隨機數。因此,我們必須依靠一些使用者定義的方法來實現此目標。Random.NextDouble()
函式用來生成一個介於 0
和 1
之間的隨機雙精度值。我們可以使用此函式生成介於 0
和 1
之間的隨機雙精度值,然後將該隨機值強制轉換為浮點型。下面的程式碼示例向我們展示瞭如何使用 C# 中的 Random.NextDouble()
函式在 0
和 1
之間生成隨機浮點數。
using System;
namespace random_float
{
class Program
{
static void Main(string[] args)
{
Random rand = new Random();
for(int i = 0; i < 10; i++)
{
float randomFloat = (float)rand.NextDouble();
Console.WriteLine("Random Float = {0}", randomFloat);
}
}
}
}
輸出:
Random Float = 0.3914659
Random Float = 0.8927528
Random Float = 0.6579643
Random Float = 0.4404075
Random Float = 0.3213561
Random Float = 0.3399849
Random Float = 0.04562188
Random Float = 0.1881405
Random Float = 0.7638124
Random Float = 0.1645804
我們使用 C# 中的 Random.NextDouble()
函式在 0
和 1
之間生成了一個隨機浮點數。我們首先生成一個介於 0
和 1
之間的隨機雙精度值,然後使用型別轉換將該雙精度值轉換為浮點數。
使用 C# 中的 Random.NextDouble()
函式生成不帶範圍的隨機浮點數
我們也可以使用 C# 中的 Random.NextDouble()
函式生成一個隨機浮點數,而無需在 0
和 1
之間設定範圍。此方法中唯一的範圍是 float 資料型別可以在其中儲存的值的範圍。我們可以使用 float.MaxValue
和 float.MinValue
來指定 float 資料型別可以儲存的最大值和最小值。以下程式碼示例向我們展示瞭如何在不使用 C# 中的 Random.NextDouble()
函式指定範圍的情況下生成隨機浮點數。
using System;
namespace random_float
{
class Program
{
static void Main(string[] args)
{
Random rand = new Random();
double range = (double)float.MaxValue - (double)float.MinValue;
for(int i = 0; i < 10; i++)
{
double sample = rand.NextDouble();
double scaled = (sample * range) + float.MinValue;
float f = (float)scaled;
Console.WriteLine(f);
}
}
}
}
輸出:
1.500952E+38
-1.930891E+38
2.951987E+38
-1.205054E+38
-6.225039E+37
3.843309E+36
-1.241292E+38
1.360907E+38
1.769061E+38
-1.577001E+38
我們使用 C# 中的 Random.NextDouble()
函式生成了一個無範圍的隨機浮點數。我們使用 float.MaxValue - float.MinValue
初始化了雙變數 range
,然後將其型別轉換為 double 資料型別。這樣可以確保隨機值範圍保持在 float 資料型別可以處理的值範圍內。我們通過將 Random.NextDouble()
函式返回的值與 range
相乘,並在結果中加上 float.MinValue
來計算隨機值。最後,我們通過型別轉換將隨機值轉換為 float 資料型別。
使用 C# 中的 Random.NextDouble()
函式在特定範圍內生成隨機浮點數
我們還可以使用 C# 中的 Random.NextDouble()
函式在特定範圍內生成隨機值。例如,假設我們必須生成一個介於 1
和 10
之間的隨機浮點數。在這種情況下,我們可以使用 Random.NextDouble()
函式在 0
和 1
之間生成一個隨機值,將其乘以範圍,然後將最小值加到該值上。以下程式碼示例向我們展示瞭如何使用 C# 中的 Random.NextDouble()
函式在指定範圍之間生成隨機數。
using System;
namespace random_float
{
class Program
{
static void Main(string[] args)
{
Random rand = new Random();
double min = 1;
double max = 10;
double range = max - min;
for (int i = 0; i < 10; i++)
{
double sample = rand.NextDouble();
double scaled = (sample * range) + min;
float f = (float)scaled;
Console.WriteLine(f);
}
}
}
}
輸出:
3.468961
8.04868
2.210197
8.150612
4.217263
5.328617
4.730082
8.462176
2.679844
8.609394
我們使用 C# 中的 Random.NextDouble()
函式在 1
和 10
之間生成了一個隨機浮點數。我們指定 min
和 max
值,並使用 range = max - min
來計算 range
。我們通過將 Random.NextDouble()
函式返回的值與 range
相乘並在結果中加上 min
來計算隨機值。最後,我們通過型別轉換將隨機值轉換為 float 資料型別。
在 C# 中使用 Random.NextBytes()
函式生成隨機浮點數
我們還可以使用 C# 中的 Random.NextBytes()
函式生成一個隨機浮點數。Random.NextBytes(byte[])
函式用於填充帶有隨機位元組值的 byte[]
陣列。我們可以通過將儲存在 byte[]
中的位元組轉換為浮點資料型別來生成隨機浮點數。以下程式碼示例向我們展示瞭如何使用 C# 中的 Random.NextBytes()
函式生成隨機浮點數。
using System;
namespace random_float
{
class Program
{
static void Main(string[] args)
{
Random rand = new Random();
for (int i = 0; i < 10; i++)
{
var array = new byte[4];
rand.NextBytes(array);
float randomFloat = BitConverter.ToSingle(array, 0);
Console.WriteLine("Random Value = {0}", randomFloat);
}
}
}
}
輸出:
Random Value = 2.021232E-20
Random Value = -121623
Random Value = -1.564382E+38
Random Value = 1.146448E-14
Random Value = -6.874067E-22
Random Value = -1.226989E+31
Random Value = -3.01435E+08
Random Value = -8.568415E+30
Random Value = -1.454825E+27
Random Value = 3.801608E-26
我們使用 C# 中的 Random.NextBytes()
函式生成了一個隨機浮點數。我們使用 Random.NextBytes()
函式用隨機位元組值填充 array
陣列。我們使用 BitConverter.ToSingle()
函式將位元組值轉換為浮點型。
Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.
LinkedIn