示例#1
0
        /// <summary>
        /// Converts a number to the string of approximation.
        /// </summary>
        /// <param name="number">The number to convert.</param>
        /// <param name="accuracy">A nature number for accuracy of the number.</param>
        /// <returns>A string format number.</returns>
        /// <exception cref="ArgumentOutOfRangeException">accuracy is less than 0 or is greater than 32.</exception>
        public string ToApproximationString(ulong number, int accuracy = 1)
        {
            if (accuracy < 0 || accuracy > 32)
            {
                throw new ArgumentOutOfRangeException(nameof(accuracy));
            }
            var levels = number.ToString(CultureInfo.InvariantCulture).Length / GroupLength;

            if (levels < 1)
            {
                return(ConvertString(number.ToString()));
            }
            var len    = levels * GroupLength;
            var format = new StringBuilder("0.");

            format.Append('0', Math.Min(accuracy, len));
            var num = new StringBuilder((number * 1.0 / Math.Pow(10, len)).ToString(format.ToString(), CultureInfo.InvariantCulture));

            if ((number / Math.Pow(10, len)).ToString(CultureInfo.InvariantCulture).Length == 4)
            {
                num.Insert(1, ',');
            }
            if (levels > 12)
            {
                num.AppendFormat("×10{0}", NumberSymbols.ToExponentString(levels * GroupLength));
            }
            else
            {
                num.Append(digits[12 + levels]);
            }

            return(ConvertString(num));
        }
示例#2
0
        /// <summary>
        /// Converts a number to the string of approximation.
        /// </summary>
        /// <param name="number">The number to convert.</param>
        /// <param name="accuracy">A nature number for accuracy of the number.</param>
        /// <returns>A string format number.</returns>
        /// <exception cref="ArgumentOutOfRangeException">accuracy is less than 0 or is greater than 32.</exception>
        public string ToApproximationString(ulong number, int accuracy = 1)
        {
            if (accuracy < 0 || accuracy > 32)
            {
                throw new ArgumentOutOfRangeException(nameof(accuracy));
            }
            var levels = Math.Abs(number.ToString(CultureInfo.InvariantCulture).Length) / GroupLength;

            if (levels < 1)
            {
                return(number.ToString());
            }
            var len    = levels * GroupLength;
            var format = new StringBuilder("0.");

            format.Append('0', Math.Min(accuracy, len));
            var num = (number * 1.0 / Math.Pow(10, len)).ToString(format.ToString(), CultureInfo.InvariantCulture);

            switch (levels)
            {
            case 1:
                return(num + "K");

            case 2:
                return(num + "M");

            case 3:
                return(num + "G");

            case 4:
                return(num + "T");

            case 5:
                return(num + "P");

            case 6:
                return(num + "E");

            case 7:
                return(num + "Z");

            case 8:
                return(num + "Y");

            default:
                return(string.Format("{0}×10{1}", num, NumberSymbols.ToExponentString(levels * GroupLength)));
            }
        }