本文介绍了生成在C#中的任意十进制的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我怎样才能得到一个随机System.Decimal? System.Random 不直接支持它。

How can I get a random System.Decimal? System.Random doesn't support it directly.

推荐答案

编辑:删除旧版本

这是类似丹尼尔的版本,但会给完整范围。它还引入了一个新的扩展方法来获得一个随机任何整数的价值,我认为这是很方便的。

This is similar to Daniel's version, but will give the complete range. It also introduces a new extension method to get a random "any integer" value, which I think is handy.

注意小数这里分布的不统一

/// <summary>
/// Returns an Int32 with a random value across the entire range of
/// possible values.
/// </summary>
public static int NextInt32(this Random rng)
{
     unchecked
     {
         int firstBits = rng.Next(0, 1 << 4) << 28;
         int lastBits = rng.Next(0, 1 << 28);
         return firstBits | lastBits;
     }
}

public static decimal NextDecimal(this Random rng)
{
     byte scale = (byte) rng.Next(29);
     bool sign = rng.Next(2) == 1;
     return new decimal(rng.NextInt32(), 
                        rng.NextInt32(),
                        rng.NextInt32(),
                        sign,
                        scale);
}

这篇关于生成在C#中的任意十进制的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-13 14:51