public static StringBuilder AppendNumber(this StringBuilder builder, float number, int decimalCount, AppendNumberOptions options) { if (float.IsNaN(number)) return builder.Append("NaN"); if (float.IsNegativeInfinity(number)) return builder.Append("-Infinity"); if (float.IsPositiveInfinity(number)) return builder.Append("+Infinity"); int intNumber = (int) (number * (float) Math.Pow(10, decimalCount) + 0.5f); return AppendNumberInternal(builder, intNumber, decimalCount, options); }
static StringBuilder AppendNumberInternal(StringBuilder builder, int number, int decimalCount, AppendNumberOptions options) { var numberFormat = CultureInfo.CurrentCulture.NumberFormat; int index = numberString.Length; int decimalPos = index - decimalCount; if (decimalPos == index) decimalPos = index + 1; int numberGroupIndex = 0; int numberGroupCount = numberGroupSizes[numberGroupIndex] + decimalCount; bool showNumberGroup = (options & AppendNumberOptions.NumberGroup) != 0; bool showPositiveSign = (options & AppendNumberOptions.PositiveSign) != 0; bool isNegative = number < 0; number = Math.Abs(number); do { // decimal point. if (index == decimalPos) { numberString[--index] = numberFormat.NumberDecimalSeparator[0]; } // digit comma. if (--numberGroupCount < 0 && showNumberGroup) { numberString[--index] = numberFormat.NumberGroupSeparator[0]; if (numberGroupIndex < numberGroupSizes.Length - 1) numberGroupIndex++; numberGroupCount = numberGroupSizes[numberGroupIndex++]; } // number to char. numberString[--index] = (char) ('0' + (number % 10)); number /= 10; } while (number > 0 || decimalPos <= index); // append a positive/negative sign. if (isNegative) { numberString[--index] = numberFormat.NegativeSign[0]; } else if (showPositiveSign) { numberString[--index] = numberFormat.PositiveSign[0]; } // finish. return builder.Append(numberString, index, numberString.Length - index); }
static void AppendNumbernternal( StringBuilder builder, int number, int decimalCount, AppendNumberOptions options) { NumberFormatInfo nfi = CultureInfo.CurrentCulture.NumberFormat; int idx = numberString.Length; int decimalPos = idx - decimalCount; if ( decimalPos == idx ) decimalPos = idx + 1; int numberGroupIdx = 0; int numberGroupCount = numberGroupSizes[numberGroupIdx] + decimalCount; bool showNumberGroup = ( options & AppendNumberOptions.NumberGroup ) != 0; bool showPositiveSign = ( options & AppendNumberOptions.PositiveSign ) != 0; bool isNegative = number < 0; number = Math.Abs( number ); do { if ( idx == decimalPos ) { numberString[--idx] = nfi.NumberDecimalSeparator[0]; } if ( --numberGroupCount < 0 && showNumberGroup ) { numberString[--idx] = nfi.NumberGroupSeparator[0]; if ( numberGroupIdx < numberGroupSizes.Length - 1 ) numberGroupIdx++; numberGroupCount = numberGroupSizes[numberGroupIdx++]; } numberString[--idx] = (char)( '0' + ( number % 10 ) ); number /= 10; } while ( number > 0 || decimalPos <= idx ); if ( isNegative ) { numberString[--idx] = nfi.NegativeSign[0]; } else if ( showPositiveSign ) { numberString[--idx] = nfi.PositiveSign[0]; } builder.Append( numberString, idx, numberString.Length - idx ); }
/// <summary> /// Convert float to string and add to string builder. /// </summary> public static void AppendNumber(this StringBuilder builder, float number, int decimalCount, AppendNumberOptions options) { // Handle NaN, Infinity cases. if (float.IsNaN(number)) { builder.Append("NaN"); } else if (float.IsNegativeInfinity(number)) { builder.Append("-Infinity"); } else if (float.IsPositiveInfinity(number)) { builder.Append("+Infinity"); } else { int intNumber = (int)(number * (float)System.Math.Pow(10, decimalCount) + 0.5f); AppendNumbernternal(builder, intNumber, decimalCount, options); } }
public static StringBuilder AppendNumber(this StringBuilder builder, int number, AppendNumberOptions options) { return AppendNumberInternal(builder, number, 0, options); }
public static StringBuilder AppendNumber(this StringBuilder builder, float number, AppendNumberOptions options) { return AppendNumber(builder, number, 2, options); }
static void AppendNumbernternal(StringBuilder builder, int number, int decimalCount, AppendNumberOptions options) { // Initialize varialbes for convertion. NumberFormatInfo nfi = CultureInfo.CurrentCulture.NumberFormat; int idx = numberString.Length; int decimalPos = idx - decimalCount; if (decimalPos == idx) decimalPos = idx + 1; int numberGroupIdx = 0; int numberGroupCount = numberGroupSizes[numberGroupIdx] + decimalCount; bool showNumberGroup = (options & AppendNumberOptions.NumberGroup) != 0; bool showPositiveSign = (options & AppendNumberOptions.PositiveSign) != 0; bool isNegative = number < 0; number = Math.Abs(number); // Converting from smallest digit. do { // Add decimal separator ("." in US). if (idx == decimalPos) { numberString[--idx] = nfi.NumberDecimalSeparator[0]; } // Added number group separator ("," in US). if (--numberGroupCount < 0 && showNumberGroup) { numberString[--idx] = nfi.NumberGroupSeparator[0]; if (numberGroupIdx < numberGroupSizes.Length - 1) numberGroupIdx++; numberGroupCount = numberGroupSizes[numberGroupIdx] - 1; } // Convert current digit to character and add to buffer. numberString[--idx] = (char)('0' + (number % 10)); number /= 10; } while (number > 0 || decimalPos <= idx); // Added sign character if needed. if (isNegative) { numberString[--idx] = nfi.NegativeSign[0]; } else if (showPositiveSign) { numberString[--idx] = nfi.PositiveSign[0]; } // Added converted string to StringBuilder. builder.Append(numberString, idx, numberString.Length - idx); }
/// <summary> /// Convert integer to string and added to string builder. /// </summary> /// <param name="number"></param> /// <param name="options">Format options</param> public static void AppendNumber(this StringBuilder builder, int number, AppendNumberOptions options) { AppendNumbernternal(builder, number, 0, options); }
/// <summary> /// Convert float to string and added to string builder. /// </summary> /// <remarks>It shows 2 decimal digits.</remarks> public static void AppendNumber(this StringBuilder builder, float number, AppendNumberOptions options) { AppendNumber(builder, number, 2, options); }
/// <summary> /// Convert float to string and added to string builder. /// </summary> public static void AppendNumber(this StringBuilder builder, float number, int decimalCount, AppendNumberOptions options) { // Handle NaN, Infinity cases. if (float.IsNaN(number)) { builder.Append("NaN"); } else if (float.IsNegativeInfinity(number)) { builder.Append("-Infinity"); } else if (float.IsPositiveInfinity(number)) { builder.Append("+Infinity"); } else { int intNumber = (int)(number * (float)Math.Pow(10, decimalCount) + 0.5f); AppendNumbernternal(builder, intNumber, decimalCount, options); } }
/// <summary> /// Convert integer to string and add to string builder. /// </summary> /// <param name="number"></param> /// <param name="options">Format options</param> public static void AppendNumber(this StringBuilder builder, int number, AppendNumberOptions options) { AppendNumbernternal(builder, number, 0, options); }
/// <summary> /// Convert float to string and add to string builder. /// </summary> /// <remarks>It shows 2 decimal digits.</remarks> public static void AppendNumber(this StringBuilder builder, float number, AppendNumberOptions options) { AppendNumber(builder, number, 2, options); }
static StringBuilder AppendNumberInternal(StringBuilder builder, int number, int decimalCount, AppendNumberOptions options) { var numberFormat = CultureInfo.CurrentCulture.NumberFormat; int index = numberString.Length; int decimalPos = index - decimalCount; if (decimalPos == index) { decimalPos = index + 1; } int numberGroupIndex = 0; int numberGroupCount = numberGroupSizes[numberGroupIndex] + decimalCount; bool showNumberGroup = (options & AppendNumberOptions.NumberGroup) != 0; bool showPositiveSign = (options & AppendNumberOptions.PositiveSign) != 0; bool isNegative = number < 0; number = Math.Abs(number); do { // decimal point. if (index == decimalPos) { numberString[--index] = numberFormat.NumberDecimalSeparator[0]; } // digit comma. if (--numberGroupCount < 0 && showNumberGroup) { numberString[--index] = numberFormat.NumberGroupSeparator[0]; if (numberGroupIndex < numberGroupSizes.Length - 1) { numberGroupIndex++; } numberGroupCount = numberGroupSizes[numberGroupIndex++]; } // number to char. numberString[--index] = (char)('0' + (number % 10)); number /= 10; } while (number > 0 || decimalPos <= index); // append a positive/negative sign. if (isNegative) { numberString[--index] = numberFormat.NegativeSign[0]; } else if (showPositiveSign) { numberString[--index] = numberFormat.PositiveSign[0]; } // finish. return(builder.Append(numberString, index, numberString.Length - index)); }
public static StringBuilder AppendNumber(this StringBuilder builder, float number, int decimalCount, AppendNumberOptions options) { if (float.IsNaN(number)) { return(builder.Append("NaN")); } if (float.IsNegativeInfinity(number)) { return(builder.Append("-Infinity")); } if (float.IsPositiveInfinity(number)) { return(builder.Append("+Infinity")); } int intNumber = (int)(number * (float)Math.Pow(10, decimalCount) + 0.5f); return(AppendNumberInternal(builder, intNumber, decimalCount, options)); }
public static void AppendNumber(this StringBuilder builder, float number, int decimalCount, AppendNumberOptions options) { if (builder == null) throw new ArgumentNullException("builder"); // Handle NaN, Infinity cases. if (float.IsNaN(number)) { builder.Append("NaN"); } else if (float.IsNegativeInfinity(number)) { builder.Append("-Infinity"); } else if (float.IsPositiveInfinity(number)) { builder.Append("+Infinity"); } else { // [FIX, DigitalRune]: The following check was added to catch overflows. // The original code does not handle the full range of float values. The variable type // in the following code was changed from int to long to extend the range. However, // if the value is still out of range, we fall back to the original Append() method (and // accept some garbage). try { // Convert the float value to a long value. (Checking for possible overflows.) long longNumber; checked { longNumber = (long)(number * Math.Pow(10, decimalCount) + 0.5); } AppendNumberInternal(builder, longNumber, decimalCount, options); } catch { builder.Append(number); } } }
/// <summary> /// Convert integer to string and add to string builder. /// </summary> /// <param name="builder"></param> /// <param name="number"></param> /// <param name="options">Format options</param> public static StringBuilder AppendNumber(this StringBuilder builder, int number, AppendNumberOptions options) { return(AppendNumberInternal(builder, number, 0, options)); }
public static void AppendNumber(this StringBuilder builder, float number, int decimalCount, AppendNumberOptions options) { if (builder == null) { throw new ArgumentNullException("builder"); } // Handle NaN, Infinity cases. if (float.IsNaN(number)) { builder.Append("NaN"); } else if (float.IsNegativeInfinity(number)) { builder.Append("-Infinity"); } else if (float.IsPositiveInfinity(number)) { builder.Append("+Infinity"); } else { // [FIX, DigitalRune]: The following check was added to catch overflows. // The original code does not handle the full range of float values. The variable type // in the following code was changed from int to long to extend the range. However, // if the value is still out of range, we fall back to the original Append() method (and // accept some garbage). try { // Convert the float value to a long value. (Checking for possible overflows.) long longNumber; checked { longNumber = (long)(number * Math.Pow(10, decimalCount) + 0.5); } AppendNumberInternal(builder, longNumber, decimalCount, options); } catch { builder.Append(number); } } }
static StringBuilder AppendNumberInternal(StringBuilder builder, int number, int decimalCount, AppendNumberOptions options) { var nfi = CultureInfo.CurrentCulture.NumberFormat; var idx = NumberString.Length; var decimalPos = idx - decimalCount; if (decimalPos == idx) { decimalPos = idx + 1; } var numberGroupIdx = 0; var numberGroupCount = NumberGroupSizes[numberGroupIdx] + decimalCount; var showNumberGroup = (options & AppendNumberOptions.NumberGroup) != 0; var showPositiveSign = (options & AppendNumberOptions.PositiveSign) != 0; var isNegative = number < 0; if (number > int.MinValue) { number = Math.Abs(number); } // Converting from smallest digit. do { // Add decimal separator ("." in US). if (idx == decimalPos) { NumberString[--idx] = nfi.NumberDecimalSeparator[0]; } // Added number group separator ("," in US). if (--numberGroupCount < 0 && showNumberGroup) { NumberString[--idx] = nfi.NumberGroupSeparator[0]; if (numberGroupIdx < NumberGroupSizes.Length - 1) { numberGroupIdx++; } numberGroupCount = NumberGroupSizes[numberGroupIdx] - 1; } // Convert current digit to character and add to buffer. NumberString[--idx] = (char)('0' + (number % 10)); number /= 10; } while (number > 0 || decimalPos <= idx); // Added sign character if needed. if (isNegative) { NumberString[--idx] = nfi.NegativeSign[0]; } else if (showPositiveSign) { NumberString[--idx] = nfi.PositiveSign[0]; } // Added converted string to StringBuilder. builder.Append(NumberString, idx, NumberString.Length - idx); return(builder); }
/// <summary> /// Convert float to string and add to string builder. /// </summary> /// <remarks>It shows 2 decimal digits.</remarks> public static StringBuilder AppendNumber(this StringBuilder builder, float number, AppendNumberOptions options) { return(AppendNumber(builder, number, 2, options)); }
static void AppendNumbernternal(StringBuilder builder, int number, int decimalCount, AppendNumberOptions options) { // Initialize variables for conversion. NumberFormatInfo nfi = CultureInfo.CurrentCulture.NumberFormat; int idx = numberString.Length; int decimalPos = idx - decimalCount; if (decimalPos == idx) { decimalPos = idx + 1; } int numberGroupIdx = 0; int numberGroupCount = numberGroupSizes[numberGroupIdx] + decimalCount; bool showNumberGroup = (options & AppendNumberOptions.NumberGroup) != 0; bool showPositiveSign = (options & AppendNumberOptions.PositiveSign) != 0; bool isNegative = number < 0; number = System.Math.Abs(number); // Converting from smallest digit. do { // Add decimal separator ("." in US). if (idx == decimalPos) { numberString[--idx] = nfi.NumberDecimalSeparator[0]; } // Added number group separator ("," in US). if (--numberGroupCount < 0 && showNumberGroup) { numberString[--idx] = nfi.NumberGroupSeparator[0]; if (numberGroupIdx < numberGroupSizes.Length - 1) { numberGroupIdx++; } numberGroupCount = numberGroupSizes[numberGroupIdx] - 1; } // Convert current digit to character and add to buffer. numberString[--idx] = (char)('0' + (number % 10)); number /= 10; } while (number > 0 || decimalPos <= idx); // Added sign character if needed. if (isNegative) { numberString[--idx] = nfi.NegativeSign[0]; } else if (showPositiveSign) { numberString[--idx] = nfi.PositiveSign[0]; } // Added converted string to StringBuilder. builder.Append(numberString, idx, numberString.Length - idx); }
static void AppendNumbernternal(StringBuilder builder, int number, int decimalCount, AppendNumberOptions options) { // 変換に必要な変数の初期化 NumberFormatInfo nfi = CultureInfo.CurrentCulture.NumberFormat; int idx = numberString.Length; int decimalPos = idx - decimalCount; if (decimalPos == idx) decimalPos = idx + 1; int numberGroupIdx = 0; int numberGroupCount = numberGroupSizes[numberGroupIdx] + decimalCount; bool showNumberGroup = (options & AppendNumberOptions.NumberGroup) != 0; bool showPositiveSign = (options & AppendNumberOptions.PositiveSign) != 0; bool isNegative = number < 0; number = Math.Abs(number); // 最小桁から各桁を文字に変換する do { // 小数点の区切り文字(日本では".")の追加 if (idx == decimalPos) { numberString[--idx] = nfi.NumberDecimalSeparator[0]; } // 桁グループ区切り文字(日本では",")の追加 if (--numberGroupCount < 0 && showNumberGroup) { numberString[--idx] = nfi.NumberGroupSeparator[0]; if (numberGroupIdx < numberGroupSizes.Length - 1) numberGroupIdx++; numberGroupCount = numberGroupSizes[numberGroupIdx++]; } // 現在の桁を文字に変換してバッファに追加 numberString[--idx] = (char) ('0' + (number % 10)); number /= 10; } while (number > 0 || decimalPos <= idx); // 符号文字を必要なら追加する if (isNegative) { numberString[--idx] = nfi.NegativeSign[0]; } else if (showPositiveSign) { numberString[--idx] = nfi.PositiveSign[0]; } // 変換結果をStringBuilderに追加する builder.Append(numberString, idx, numberString.Length - idx); }