/// <summary> /// Parse a part (real or complex) from a complex number. /// </summary> /// <param name="token">Start Token.</param> /// <param name="imaginary">Is set to <c>true</c> if the part identified itself as being imaginary.</param> /// <param name="format"> /// An <see cref="IFormatProvider"/> that supplies culture-specific /// formatting information. /// </param> /// <returns>Resulting part as double.</returns> /// <exception cref="FormatException"/> static double ParsePart(ref LinkedListNode <string> token, out bool imaginary, IFormatProvider format) { imaginary = false; if (token == null) { throw new FormatException(); } // handle prefix modifiers if (token.Value == "+") { token = token.Next; if (token == null) { throw new FormatException(); } } var negative = false; if (token.Value == "-") { negative = true; token = token.Next; if (token == null) { throw new FormatException(); } } // handle prefix imaginary symbol if (String.Compare(token.Value, "i", StringComparison.OrdinalIgnoreCase) == 0 || String.Compare(token.Value, "j", StringComparison.OrdinalIgnoreCase) == 0) { imaginary = true; token = token.Next; if (token == null) { return(negative ? -1 : 1); } } var value = GlobalizationHelper.ParseDouble(ref token, format.GetCultureInfo()); // handle suffix imaginary symbol if (token != null && (String.Compare(token.Value, "i", StringComparison.OrdinalIgnoreCase) == 0 || String.Compare(token.Value, "j", StringComparison.OrdinalIgnoreCase) == 0)) { if (imaginary) { // only one time allowed: either prefix or suffix, or neither. throw new FormatException(); } imaginary = true; token = token.Next; } return(negative ? -value : value); }
/// <summary> /// Parse a part (real or complex) from a complex number. /// </summary> /// <param name="token">Start Token.</param> /// <param name="imaginary">Is set to <c>true</c> if the part identified itself as being imaginary.</param> /// <param name="format"> /// An <see cref="IFormatProvider"/> that supplies culture-specific /// formatting information. /// </param> /// <returns>Resulting part as double.</returns> /// <exception cref="FormatException"/> private static double ParsePart(ref LinkedListNode<string> token, out bool imaginary, IFormatProvider format) { imaginary = false; if (token == null) { throw new FormatException(); } // handle prefix modifiers if (token.Value == "+") { token = token.Next; if (token == null) { throw new FormatException(); } } var negative = false; if (token.Value == "-") { negative = true; token = token.Next; if (token == null) { throw new FormatException(); } } // handle prefix imaginary symbol if (String.Compare(token.Value, "i", StringComparison.OrdinalIgnoreCase) == 0 || String.Compare(token.Value, "j", StringComparison.OrdinalIgnoreCase) == 0) { imaginary = true; token = token.Next; if (token == null) { return negative ? -1 : 1; } } #if PORTABLE var value = GlobalizationHelper.ParseDouble(ref token); #else var value = GlobalizationHelper.ParseDouble(ref token, format.GetCultureInfo()); #endif // handle suffix imaginary symbol if (token != null && (String.Compare(token.Value, "i", StringComparison.OrdinalIgnoreCase) == 0 || String.Compare(token.Value, "j", StringComparison.OrdinalIgnoreCase) == 0)) { if (imaginary) { // only one time allowed: either prefix or suffix, or neither. throw new FormatException(); } imaginary = true; token = token.Next; } return negative ? -value : value; }