internal CalcResult ExecuteExpression() { var decimalResult = String.Empty; var binaryResult = String.Empty; var hexadecimalResult = String.Empty; var decimalSeparator = $"{Separator(culture: Culture)}"; var message = $"note, your decimal separator is a ' " + decimalSeparator + " '"; if (String.IsNullOrWhiteSpace(Expression)) { return(new CalcResult(decResult: decimalResult, binResult: binaryResult, hexResult: hexadecimalResult, message: message, separator: decimalSeparator)); } try { var myNode = CalculationParser.GrowNodeTree(input: Expression, culture: Culture); if (myNode != null) { decimal result = myNode.Calculate(); decimalResult = result.ToString($"n{PrecisionForDecimalResult}", Culture). TrimEnd('0').TrimEnd(Separator(culture: Culture)); binaryResult = Convertions.ConvertDecimalToBinaryString (input: Decimal.Parse(decimalResult, Culture), precisionForBinary: PrecisionForBinaryResult, culture: Culture); hexadecimalResult = Convertions.ConvertDecimalToHexadecimalString (input: Decimal.Parse(decimalResult, Culture)); int signsAfterSeparator = SignsAfterSeparator(number: result, separator: decimalSeparator); message = CheckOnFractionalRounding(afterRounding: decimalResult, precision: PrecisionForDecimalResult, message: message, beforeRounding: result.ToString($"n{signsAfterSeparator}", Culture). TrimEnd('0').TrimEnd(Separator(culture: Culture))); } } catch (CheckingException exception) { message = exception.Message; } catch (DivideByZeroException) { message = "Divide by Zero gives you infinity"; decimalResult = Infinity; binaryResult = Infinity; hexadecimalResult = Infinity; } catch (OverflowException) { message = "value is too large or too small"; } catch (Exception) { message = "Calculation failed"; } return(new CalcResult(decResult: decimalResult, binResult: binaryResult, hexResult: hexadecimalResult, message: message, separator: decimalSeparator)); }