private static unsafe void FormatGeneral(StringBuilder sb, NumberBuffer number, int nMinDigits, int nMaxDigits, NumberFormatInfo info, char expChar, bool bSuppressScientific)
{
int digPos = number.scale;
bool scientific = false;
if (!bSuppressScientific)
{
// Don't switch to scientific notation
if (digPos > nMaxDigits || digPos < -3)
{
digPos = 1;
scientific = true;
}
}
char* dig = number.digits;
if (digPos > 0)
{
do
{
sb.Append((*dig != 0) ? *dig++ : '0');
} while (--digPos > 0);
}
else
{
sb.Append('0');
}
if (*dig != 0 || digPos < 0)
{
sb.Append(info.NumberDecimalSeparator);
while (digPos < 0)
{
sb.Append('0');
digPos++;
}
while (*dig != 0)
sb.Append(*dig++);
}
if (scientific)
FormatExponent(sb, info, number.scale - 1, expChar, 2, true);
}