System.NumberFormatter.FormatCustom C# (CSharp) Méthode

FormatCustom() public méthode

public FormatCustom ( string format, NumberFormatInfo nfi ) : string
format string
nfi System.Globalization.NumberFormatInfo
Résultat string
		public string FormatCustom (string format, NumberFormatInfo nfi)
		{
			bool p = _positive;
			int offset = 0;
			int length = 0;
			CustomInfo.GetActiveSection (format, ref p, IsZero, ref offset, ref length);
			if (length == 0)
				return _positive ? string.Empty : nfi.NegativeSign;
			_positive = p;

			CustomInfo info = CustomInfo.Parse (format, offset, length, nfi);
#if false
			Console.WriteLine ("Format : {0}",format);
			Console.WriteLine ("DecimalDigits : {0}",info.DecimalDigits);
			Console.WriteLine ("DecimalPointPos : {0}",info.DecimalPointPos);
			Console.WriteLine ("DecimalTailSharpDigits : {0}",info.DecimalTailSharpDigits);
			Console.WriteLine ("IntegerDigits : {0}",info.IntegerDigits);
			Console.WriteLine ("IntegerHeadSharpDigits : {0}",info.IntegerHeadSharpDigits);
			Console.WriteLine ("IntegerHeadPos : {0}",info.IntegerHeadPos);
			Console.WriteLine ("UseExponent : {0}",info.UseExponent);
			Console.WriteLine ("ExponentDigits : {0}",info.ExponentDigits);
			Console.WriteLine ("ExponentTailSharpDigits : {0}",info.ExponentTailSharpDigits);
			Console.WriteLine ("ExponentNegativeSignOnly : {0}",info.ExponentNegativeSignOnly);
			Console.WriteLine ("DividePlaces : {0}",info.DividePlaces);
			Console.WriteLine ("Percents : {0}",info.Percents);
			Console.WriteLine ("Permilles : {0}",info.Permilles);
#endif
			StringBuilder sb_int = new StringBuilder (info.IntegerDigits * 2);
			StringBuilder sb_dec = new StringBuilder (info.DecimalDigits * 2);
			StringBuilder sb_exp = (info.UseExponent ? new StringBuilder (info.ExponentDigits * 2) : null);

			int diff = 0;
			if (info.Percents > 0)
				Multiply10(2 * info.Percents);
			if (info.Permilles > 0)
				Multiply10(3 * info.Permilles);
			if (info.DividePlaces > 0)
				Divide10(info.DividePlaces);

			bool expPositive = true;
			if (info.UseExponent && (info.DecimalDigits > 0 || info.IntegerDigits > 0)) {
				if (!IsZero) {
					RoundPos (info.DecimalDigits + info.IntegerDigits);
					diff -= _decPointPos - info.IntegerDigits;
					_decPointPos = info.IntegerDigits;
				}

				expPositive = diff <= 0;
				AppendNonNegativeNumber (sb_exp, diff < 0 ? -diff : diff);
			}
			else
				RoundDecimal (info.DecimalDigits);

			if (info.IntegerDigits != 0 || !IsZeroInteger)
				AppendIntegerString (IntegerDigits, sb_int);

			AppendDecimalString (DecimalDigits, sb_dec);

			if (info.UseExponent) {
				if (info.DecimalDigits <= 0 && info.IntegerDigits <= 0)
					_positive = true;

				if (sb_int.Length < info.IntegerDigits)
					sb_int.Insert (0, "0", info.IntegerDigits - sb_int.Length);

				while (sb_exp.Length < info.ExponentDigits - info.ExponentTailSharpDigits)
					sb_exp.Insert (0, '0');

				if (expPositive && !info.ExponentNegativeSignOnly)
					sb_exp.Insert (0, nfi.PositiveSign);
				else if (!expPositive)
					sb_exp.Insert (0, nfi.NegativeSign);
			}
			else {
				if (sb_int.Length < info.IntegerDigits - info.IntegerHeadSharpDigits)
					sb_int.Insert (0, "0", info.IntegerDigits - info.IntegerHeadSharpDigits - sb_int.Length);
				if (info.IntegerDigits == info.IntegerHeadSharpDigits && IsZeroOnly (sb_int))
					sb_int.Remove (0, sb_int.Length);
			}

			ZeroTrimEnd (sb_dec, true);
			while (sb_dec.Length < info.DecimalDigits - info.DecimalTailSharpDigits)
				sb_dec.Append ('0');
			if (sb_dec.Length > info.DecimalDigits)
				sb_dec.Remove (info.DecimalDigits, sb_dec.Length - info.DecimalDigits);

			return info.Format (format, offset, length, nfi, _positive, sb_int, sb_dec, sb_exp);
		}
		#endregion public number formatting methods