65.9K
CodeProject 正在变化。 阅读更多。
Home

生成随机数

starIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

1.00/5 (3投票s)

2008年6月30日

CPOL
viewsIcon

23889

downloadIcon

309

轻松生成随机实数(浮点数)或整数。

csRandom_source

引言

这篇文章的核心思想是如何在 .NET 中生成随机浮点数。几天前,我在为股票市场生成随机实数时遇到了问题,并在 CodeProject 中搜索了代码,但没有找到解决此问题的有效方法。

RandomFloat 类

RandomFloat 类包含属性,允许用户在特定范围内生成随机实数或整数,以及一个标志来启用/禁用实数生成器。

使用代码

通过将 AllowFloating 属性设置为 true 或 false 来启用或禁用实数生成器,然后调用重写方法 NextDouble()

    public class RandomFloat : Random
    {
        protected const int DEFAULT_MIN_VAL = 1;
        protected const int DEFAULT_MAX_VAL = 10;

        protected bool m_bAllowFloat;
        protected int m_iMinVal = DEFAULT_MIN_VAL;
        protected int m_iMaxVal = DEFAULT_MAX_VAL;

        public RandomFloat()
        {
        }

        public RandomFloat(bool bAllowFloat)
        {
            m_bAllowFloat = bAllowFloat;
        }

        public bool AllowFloating
        {
            get
            {
                return m_bAllowFloat;
            }
            set
            {
                m_bAllowFloat = value;
            }
        }

        public int MinRange
        {
            get
            {
                return m_iMinVal;
            }
            set
            {
                m_iMinVal = value;
            }
        }

        public int MaxRange
        {
            get
            {
                return m_iMaxVal;
            }
            set
            {
                m_iMaxVal = value;
            }
        }

        public override double NextDouble()
        {
            int iRnd = Next(m_iMinVal, m_iMaxVal);
            double fRnd = base.NextDouble();

            if (m_bAllowFloat)
            {
                if (iRnd < 0)
                    fRnd = iRnd + (fRnd * -1);
                else
                    fRnd += iRnd;
            }
            else
                fRnd = iRnd;

            if (fRnd > m_iMaxVal)
                fRnd = m_iMaxVal;

            return fRnd;
        }
    }
© . All rights reserved.