public string FormatPercent (int precision, NumberFormatInfo nfi)
{
precision = (precision >= 0 ? precision : nfi.PercentDecimalDigits);
Multiply10(2);
RoundDecimal (precision);
ResetCharBuf (IntegerDigits * 2 + precision + 16);
if (_positive) {
if (nfi.PercentPositivePattern == 2)
Append (nfi.PercentSymbol);
}
else {
switch (nfi.PercentNegativePattern) {
case 0:
Append (nfi.NegativeSign);
break;
case 1:
Append (nfi.NegativeSign);
break;
case 2:
Append (nfi.NegativeSign);
Append (nfi.PercentSymbol);
break;
}
}
AppendIntegerStringWithGroupSeparator (nfi.RawPercentGroupSizes, nfi.PercentGroupSeparator);
if (precision > 0) {
Append (nfi.PercentDecimalSeparator);
AppendDecimalString (precision);
}
if (_positive) {
switch (nfi.PercentPositivePattern) {
case 0:
Append (' ');
Append (nfi.PercentSymbol);
break;
case 1:
Append (nfi.PercentSymbol);
break;
}
}
else {
switch (nfi.PercentNegativePattern) {
case 0:
Append (' ');
Append (nfi.PercentSymbol);
break;
case 1:
Append (nfi.PercentSymbol);
break;
}
}
return new string (_cbuf, 0, _ind);
}