public void ConvertToBinaryTest() { Assert.AreEqual("110100010001.110001", Convertions.ConvertDecimalToBinaryString(input: 3345.7680098M, precisionForBinary: 6, culture: new CultureInfo("ja-JP"))); Assert.AreEqual("-10100100010100,11", Convertions.ConvertDecimalToBinaryString(input: -10516.7888M, precisionForBinary: 4, culture: new CultureInfo("fr-FR"))); Assert.AreEqual("10000000000000000000000000000000", Convertions.ConvertDecimalToBinaryString(input: 2147483648M, precisionForBinary: 5, culture: new CultureInfo("uk-UA"))); Assert.AreEqual("0.000110011", Convertions.ConvertDecimalToBinaryString(input: 0.1M, precisionForBinary: 10, culture: new CultureInfo("en-US"))); }
private static void DisplayBinaryResult(decimal input, CultureInfo culture) { string binaryResult = Convertions.ConvertDecimalToBinaryString (input: input, precisionForBinary: PrecisionForBinaryResult, culture: culture); Console.ForegroundColor = ConsoleColor.DarkGray; Console.Write("binary: "); Console.ForegroundColor = ConsoleColor.Cyan; Console.WriteLine(binaryResult); }
internal static string ExecuteExpression(string input, CultureInfo culture) { string decimalResult = null; try { var myNode = CalculationParser.GrowNodeTree(input: input, culture: culture); if (myNode != null) { decimal result = DisplayDecimalResult(node: myNode, culture: culture); decimalResult = result.ToString($"n{PrecisionForDecimalResult}", culture); decimalResult = decimalResult.TrimEnd('0').TrimEnd(Separator(culture: culture)); string binaryResult = Convertions.ConvertDecimalToBinaryString (input: result, precisionForBinary: PrecisionForBinaryResult, culture: culture); DisplayBinaryResult(input: result, culture: culture); Console.ForegroundColor = ConsoleColor.White; Notify?.Invoke(); Notify = null; } } catch (CheckingException exception) { Console.ForegroundColor = ConsoleColor.Magenta; Console.WriteLine("Error: " + exception.Message); } catch (DivideByZeroException) { Console.ForegroundColor = ConsoleColor.Magenta; Console.WriteLine("Error: Divide by Zero"); } catch (OverflowException) { Console.ForegroundColor = ConsoleColor.Magenta; Console.WriteLine("Error: Too large or too small value"); } catch (Exception) { Console.ForegroundColor = ConsoleColor.Magenta; Console.WriteLine("Error: Calculation failed"); } return(decimalResult); }
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)); }