Ответ 1
Не уверен (и не смог проверить прямо сейчас), но что-то вроде этой работы?
"#,##0.################"
У меня есть число с переменным числом цифр после десятичной точки. Я хочу отформатировать число с запятыми и всеми десятичными числами.
Например: 42,023,212.0092343234
Если я использую ToString ( "N" ), я получаю только 2 десятичных знака, ToString ( "f" ) дает мне все десятичные числа без запятых. Как мне получить оба?
Не уверен (и не смог проверить прямо сейчас), но что-то вроде этой работы?
"#,##0.################"
string.Format("{0:#,##0.############}", value);
даст вам до 12 знаков после запятой.
Не существует специального спецификатора формата для "всех следующих цифр", поэтому что-то вроде этого будет ближе всего к тому, что вы хотите.
Обратите внимание, что вы ограничены точностью вашей переменной. A double
имеет только 15-16 цифр точности, так как ваша левая сторона становится больше, число десятичных знаков будет уменьшаться.
ОБНОВЛЕНИЕ. Глядя на документацию MSDN по типу System.Double
, я вижу следующее:
По умолчанию двойное значение содержит 15 десятичные цифры точности, хотя сохраняется максимум 17 цифр внутри.
Итак, я думаю, pdr на что-то, на самом деле. Просто сделайте следующее:
// 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
Ha, ну, как вы можете видеть, это дает несовершенные результаты, из-за (я думаю) математические проблемы с плавающей запятой. Ну что ж; это вариант, во всяком случае.
Попробуйте ToString("N2")
[DisplayFormat (DataFormatString = "{0: 0,0.00}")]
Вот несколько способов достичь ваших ожиданий...
decimal d = 42023212.0092343234M;
NumberFormatInfo nfi = (NumberFormatInfo) CultureInfo.InvariantCulture.NumberFormat.Clone();
nfi.NumberDecimalDigits= (d - Decimal.Truncate(d)).ToString().Length-2;
Console.WriteLine(d.ToString("N",nfi));
Подробнее о NumberFormatInfo.. смотрите в MSDN..
http://msdn.microsoft.com/en-us/library/system.globalization.numberformatinfo.aspx