如何获取一个随机的 System.Decimal?System.Random
并不直接支持它。
如何获取一个随机的 System.Decimal?System.Random
并不直接支持它。
请查看以下链接,其中包含现成的实现,应该会有所帮助:
特别是广泛的分布,建立在直接派生自System.Random的随机数生成器(MersenneTwister等)之上,都提供了方便的扩展方法(例如NextFullRangeInt32、NextFullRangeInt64、NextDecimal等)。当然,您也可以只使用默认的SystemRandomSource,它仅仅是带有扩展方法的System.Random。
哦,如果需要,您还可以将RNG实例创建为线程安全的。
非常方便!
这是一个老问题,但对于那些刚开始阅读它的人来说,为什么要重复造轮子呢?
我想生成最多9位小数的“随机”小数。我的方法是生成一个双精度浮点数,然后将其除以所需的小数位数。
int randomInt = rnd.Next(0, 100);
double randomDouble = rnd.Next(0, 999999999);
decimal randomDec = Convert.ToDecimal(randomint) + Convert.ToDecimal((randomDouble/1000000000));
"randomInt"是小数点前的数字,你可以直接放0。 要减少小数点位数,只需删除随机数中的“9”和除数中的“0”。
System.Random rnd = new System.Random();
System.Math.Round( Convert.ToDecimal(rnd.NextDouble() * (maxValue-minValue) + minValue) , decimalPlaces);
一行代码总是最好的,下面是完整的代码和示例
using System;
public class Program
{
public static void Main()
{
var val = GetRandomDecimal(0, 100, 2);
Console.WriteLine(val.ToString());
}
static System.Random rnd = new System.Random();
public static decimal GetRandomDecimal(int minValue, int maxValue, int decimalPlaces)
{
return System.Math.Round( Convert.ToDecimal(rnd.NextDouble() * (maxValue-minValue) + minValue) , decimalPlaces);
}
}
Math.Round
导致上下限数值的偏差。例如,如果我尝试生成 0 到 1 的数字,并保留 1 位小数,则 0.0 出现的频率为 20 分之一,1.0 同样如此。其他数字从 0.1 到 0.9 的出现频率是十分之一。这不是均匀的。 - Enigmativity public static decimal RandomDecimal()
{
int a = RandomNumber(2, 10);
int b = RandomNumber(0, 99);
string c = a + "." + b;
decimal d = decimal.Parse(c);
return d;
}
public static int RandomNumber(int min, int max)
{
return _random.Next(min, max);
}