private static Parse <string> DecimalStringHelper(string x, bool front, int stelle) { return(value => { var culture = new CultureInfo("en-gb"); if (front) { ParseResult <int> parseResult = DigitValue()(value); if (parseResult.Succeeded) { string str = Convert.ToString(10 * Convert.ToInt32(x) + Convert.ToInt32(parseResult.Result), culture); var doubleVal = DecimalStringHelper(str, true, 1); ParseResult <string> result = doubleVal(parseResult.RemainingInput); return result; } else { ParseResult <char> pointResult = IsPoint()(value); if (pointResult.Succeeded) { var doubleVal = DecimalStringHelper(x, false, 1); ParseResult <string> result = doubleVal(pointResult.RemainingInput); return result; } if (string.IsNullOrEmpty(x) || (!parseResult.Succeeded && !pointResult.Succeeded)) { return new ParseResult <string>(x, parseResult.RemainingInput, false); } return new ParseResult <string>(x, parseResult.RemainingInput, true); } } else { ParseResult <int> parseResult = DigitValue()(value); if (parseResult.Succeeded) { decimal dec = (decimal)parseResult.Result; for (int i = 0; i < stelle; i++) { dec = dec / 10; } string str = Convert.ToString(Convert.ToDecimal(x) + Convert.ToDecimal(dec), culture); var doubleVal = DecimalStringHelper(str, false, ++stelle); ParseResult <string> result = doubleVal(parseResult.RemainingInput); return result; } if (string.IsNullOrEmpty(x)) { return new ParseResult <string>(x, parseResult.RemainingInput, false); } return new ParseResult <string>(x, parseResult.RemainingInput, true); } }); }
private static Parse <decimal> DecimalHelper(decimal x, bool front, int stelle) { return(value => { if (front) { ParseResult <int> parseResult = DigitValue()(value); if (parseResult.Succeeded) { var doubleVal = DecimalHelper(10 * x + parseResult.Result, true, 1); ParseResult <decimal> result = doubleVal(parseResult.RemainingInput); return result; } else { ParseResult <char> pointResult = IsPoint()(value); if (pointResult.Succeeded) { var doubleVal = DecimalHelper(x, false, 1); ParseResult <decimal> result = doubleVal(pointResult.RemainingInput); return result; } return new ParseResult <decimal>(x, parseResult.RemainingInput, false); } } else { ParseResult <int> parseResult = DigitValue()(value); if (parseResult.Succeeded) { decimal dec = (decimal)parseResult.Result; for (int i = 0; i < stelle; i++) { dec = dec / 10; } var doubleVal = DecimalHelper(x + dec, false, ++stelle); ParseResult <decimal> result = doubleVal(parseResult.RemainingInput); return result; } return new ParseResult <decimal>(x, parseResult.RemainingInput, false); } }); }