public string FormatCurrency (int precision, NumberFormatInfo nfi)
{
precision = (precision >= 0 ? precision : nfi.CurrencyDecimalDigits);
RoundDecimal (precision);
ResetCharBuf (IntegerDigits * 2 + precision * 2 + 16);
if (_positive) {
switch (nfi.CurrencyPositivePattern) {
case 0:
Append (nfi.CurrencySymbol);
break;
case 2:
Append (nfi.CurrencySymbol);
Append (' ');
break;
}
}
else {
switch (nfi.CurrencyNegativePattern) {
case 0:
Append ('(');
Append (nfi.CurrencySymbol);
break;
case 1:
Append (nfi.NegativeSign);
Append (nfi.CurrencySymbol);
break;
case 2:
Append (nfi.CurrencySymbol);
Append (nfi.NegativeSign);
break;
case 3:
Append (nfi.CurrencySymbol);
break;
case 4:
Append ('(');
break;
case 5:
Append (nfi.NegativeSign);
break;
case 8:
Append (nfi.NegativeSign);
break;
case 9:
Append (nfi.NegativeSign);
Append (nfi.CurrencySymbol);
Append (' ');
break;
case 11:
Append (nfi.CurrencySymbol);
Append (' ');
break;
case 12:
Append (nfi.CurrencySymbol);
Append (' ');
Append (nfi.NegativeSign);
break;
case 14:
Append ('(');
Append (nfi.CurrencySymbol);
Append (' ');
break;
case 15:
Append ('(');
break;
}
}
AppendIntegerStringWithGroupSeparator (nfi.RawCurrencyGroupSizes, nfi.CurrencyGroupSeparator);
if (precision > 0) {
Append (nfi.CurrencyDecimalSeparator);
AppendDecimalString (precision);
}
if (_positive) {
switch (nfi.CurrencyPositivePattern) {
case 1:
Append (nfi.CurrencySymbol);
break;
case 3:
Append (' ');
Append (nfi.CurrencySymbol);
break;
}
}
else {
switch (nfi.CurrencyNegativePattern) {
case 0:
Append (')');
break;
case 3:
Append (nfi.NegativeSign);
break;
case 4:
Append (nfi.CurrencySymbol);
Append (')');
break;
case 5:
Append (nfi.CurrencySymbol);
break;
case 6:
Append (nfi.NegativeSign);
Append (nfi.CurrencySymbol);
break;
case 7:
Append (nfi.CurrencySymbol);
Append (nfi.NegativeSign);
break;
case 8:
Append (' ');
Append (nfi.CurrencySymbol);
break;
case 10:
Append (' ');
Append (nfi.CurrencySymbol);
Append (nfi.NegativeSign);
break;
case 11:
Append (nfi.NegativeSign);
break;
case 13:
Append (nfi.NegativeSign);
Append (' ');
Append (nfi.CurrencySymbol);
break;
case 14:
Append (')');
break;
case 15:
Append (' ');
Append (nfi.CurrencySymbol);
Append (')');
break;
}
}
return new string (_cbuf, 0, _ind);
}