生成特定区段的随机小数
引子
问题来自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();
转载请注明出处及作者,谢谢!