示例#1
0
        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);
        }
示例#2
0
        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 );
        }
示例#4
0
        /// <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);
            }
        }
示例#5
0
 public static StringBuilder AppendNumber(this StringBuilder builder, int number, AppendNumberOptions options)
 {
     return AppendNumberInternal(builder, number, 0, options);
 }
示例#6
0
 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);
            }
        }
示例#11
0
 /// <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);
 }
示例#12
0
 /// <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);
 }
示例#13
0
        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));
        }
示例#14
0
        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));
        }
示例#15
0
        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);
            }
              }
        }
示例#16
0
 /// <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));
 }
示例#17
0
        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);
                }
            }
        }
示例#18
0
        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);
        }
示例#19
0
 /// <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));
 }
示例#20
0
        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);
        }