65.9K
CodeProject is changing. Read more.
Home

generate random numbers

starIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

1.00/5 (3 votes)

Jun 30, 2008

CPOL
viewsIcon

23500

downloadIcon

275

Easy way to generate random real (float) or integer numbers

csRandom_source

Introduction

The main idea for this article is how to create random floating numbers in .NET. Before few days i faced problem for generating random real numbers for Stock markets and i searched for a code in CodeProject but i didn't found useful way for this problem.

RandomFloat Class

The RandomFloat class contains properties that allow user to generate random real-integer numbers between specific range and flag to turn on/off real number generator.

Using the code

Turn on or off the real number generator by set the AllowFloating property to true or false, then call the override method 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;
        }
    }