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); }