private IList <NumberParts> GetNumberPartsCollection(string[] numberStrings)
        {
            IList <NumberParts> numbers = new List <NumberParts>();

            // Split the number parts (symbol, whole number, fractional part)
            for (int i = 0; i < numberStrings.Length; i++)
            {
                numbers.Add(NumberParts.ParseNumberString(numberStrings[i]));
            }

            return(numbers);
        }
        private static bool IsGreater(NumberParts num1, NumberParts num2)
        {
            if (num1.IsNegative && !num2.IsNegative)
            {
                return(false);
            }
            if (num1.IsNegative && num2.IsNegative)
            {
                // -100 , -1
                var compareWholeNumResult = CompareNumberStringByValue(num1.WholeNumPart, num2.WholeNumPart, true);

                if (compareWholeNumResult == ComparisonResult.FirstIsGreaterThenSecond)
                {
                    //negative big numbers are actually small
                    return(false);
                }
                else if (compareWholeNumResult == ComparisonResult.FirstIsLessThanSecond)
                {
                    //negative smaller numbers are actually big
                    return(true);
                }
                else if (compareWholeNumResult == ComparisonResult.BothAreEqual)
                {
                    //-1.1, -1.0
                    var compareResult = CompareNumberStringByValue(num1.FractionalPart, num2.FractionalPart, false);
                    if (compareResult == ComparisonResult.FirstIsGreaterThenSecond)
                    {
                        return(false);
                    }
                    else // <=  ComparisonResult.FirstIsLessThanSecond || ComparisonResult.BothAreEqual
                    {
                        return(true);
                    }
                }
            }
            else if (!num1.IsNegative && !num2.IsNegative)
            {
                var compareResult = CompareNumberStringByValue(num1.WholeNumPart, num2.WholeNumPart, true);

                if (compareResult == ComparisonResult.FirstIsGreaterThenSecond)
                {
                    return(true);
                }
                else if (compareResult == ComparisonResult.FirstIsLessThanSecond)
                {
                    return(false);
                }
                else if (compareResult == ComparisonResult.BothAreEqual)
                {
                    var compareFractionalPartResult = CompareNumberStringByValue(num1.FractionalPart, num2.FractionalPart, false);
                    if (compareFractionalPartResult == ComparisonResult.FirstIsGreaterThenSecond)
                    {
                        return(true);
                    }
                    else // <=
                    {
                        return(false);
                    }
                }
            }

            // num1 is positive and num2 is negative
            return(true);
        }
        /// <summary>
        /// Parses the number string.
        /// </summary>
        /// <param name="numberStringInput">The number string input.</param>
        /// <returns>NumberParts instance</returns>
        /// <remarks>
        /// This method does not do any validation.
        /// Expects proper number string.
        /// Example format: [+|-]([0-9])([.[0-9]])
        /// </remarks>
        public static NumberParts ParseNumberString(string numberStringInput)
        {
            NumberParts n = new NumberParts();

            string tempWholeNum = "";
            bool   leadingZeros = true;
            int    indexOfDOT   = -1;

            foreach (var c in numberStringInput)
            {
                indexOfDOT++;

                /*if (c == '-')
                 *  tempWholeNum += c;
                 * else
                 */
                if (c == '.')
                {
                    break;// do not process the fractional part
                }
                else
                {
                    if (c == '-')
                    {
                        n.IsNegative = true;
                    }
                    else if (leadingZeros && c != '0' && c != '+')
                    {
                        tempWholeNum += c;
                        leadingZeros  = false;
                    }
                    else if (!leadingZeros)
                    {
                        if (c != '+')// ignore leading (+) symbol in positive number
                        {
                            tempWholeNum += c;
                        }
                    }
                }
            }

            // ignore the dot character and go over the (.)
            n.FractionalPart = string.Empty;
            for (int indexOfCharNextToDOT = indexOfDOT + 1; indexOfCharNextToDOT < numberStringInput.Length; indexOfCharNextToDOT++)
            {
                n.FractionalPart += numberStringInput[indexOfCharNextToDOT];
            }

            //// dot presents in the number and not as a last char
            //if (indexOfCharNextToDOT < numberStringInput.Length)
            //{
            //    n.FractionalPart = numberStringInput.Substring(indexOfCharNextToDOT, numberStringInput.Length - indexOfCharNextToDOT);
            //}

            if (tempWholeNum == "-" || tempWholeNum == "")
            {
                tempWholeNum = "0";
            }

            n.WholeNumPart = tempWholeNum;
            return(n);
        }