生成特定区段的随机小数

引子

问题来自CSDN上的一个帖子,要求产生3.85~4.82之间的随机小数。思路相对简单,先生成随机整数,再除以100得到小数。

借鉴了前人使用Guid生成随机数的经验,我使用LINQ,利用Guid.NewGuid()生成的随机数作为key、以385~482之间的整数为value,按照key进行排序,再将value组成的序列中的值,依次除以100取浮点值作为结果返回。

示例代码

public static void Main(string[] args)
{
IList<float> result = generaterandomfloat(385, 482);

    foreach (float v in result)
        Console.WriteLine("{0:0.00}", v);            

    Console.WriteLine("\nPress any key...");
    Console.ReadKey();
}

public static float[] generaterandomfloat(int start, int end)
{
    System.Diagnostics.Debug.Assert(start < end);

    float[] result = Enumerable.Range(start, end - start + 1)
        .Select(x => new { key = Guid.NewGuid(), value = x })
        .OrderBy(o => o.key)
        .Select(h => ((float)h.value) / 100f)
        .ToArray();

    return result;
}

 

7月13日修正:


把OrderBy()想复杂了,其实直接用Guid.NewGuid()即可。

float[] result = Enumerable.Range(start, end - start + 1)                
    .OrderBy(o => Guid.NewGuid())
    .Select(x => ((float) x) / 100f)
    .ToArray();
posted @ 2011-07-12 19:57  没头脑的老毕  阅读(375)  评论(0编辑  收藏  举报