UPDATE: Глядя на MSDN documentation on the System.Double
type, я вижу это:
По умолчанию Double значение содержит 15 десятичных цифр точности, хотя максимум 17 цифр поддерживается внутренне.
Так что я думаю pdr's on to something, фактически. Просто сделайте это:
// As long as you've got at least 15 #s after the decimal point,
// you should be good.
value.ToString("#,#.###############");
Вот идея:
static string Format(double value)
{
double wholePart = Math.Truncate(value);
double decimalPart = Math.Abs(value - wholePart);
return wholePart.ToString("N0") + decimalPart.ToString().TrimStart('0');
}
Пример:
Console.WriteLine(Format(42023212.0092343234));
Выход:
42,023,212.00923432409763336
Ха, ну, как вы можете видеть, это дает несовершенные результаты, из-за (я думаю) математических вопросов с плавающей запятой. Ну что ж; во всяком случае, это вариант.
Лучше пока, он работает до тех пор, пока десятичные разряды не будут больше, чем число #. Я надеялся избежать этой опции, но если это единственный способ ..... – NotDan
Хороший звонок. Я говорю, что это лучший ответ. –