2010-07-22 2 views
11

У меня есть число с переменным числом цифр после десятичной точки. Я хочу отформатировать число с запятыми и всеми десятичными числами.Как отформатировать число в C# с запятыми и десятичными знаками?

Например: 42,023,212.0092343234

Если я использую ToString ("N") Я получаю только 2 десятичных знаков, ToString ("е") дает мне все десятичные запятые нет. Как мне получить оба?

ответ

12

Не уверен (и не смог проверить прямо сейчас), но что-то вроде этой работы?

"#,##0.################" 
+0

Лучше пока, он работает до тех пор, пока десятичные разряды не будут больше, чем число #. Я надеялся избежать этой опции, но если это единственный способ ..... – NotDan

+0

Хороший звонок. Я говорю, что это лучший ответ. –

1

Попробуйте ToString("N2")

+0

Это показывает только последние 2 десятичные числа, я хочу, чтобы они отображали их все, но число десятичных знаков будет отличаться от 0-? – NotDan

2

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

Ха, ну, как вы можете видеть, это дает несовершенные результаты, из-за (я думаю) математических вопросов с плавающей запятой. Ну что ж; во всяком случае, это вариант.

+0

Возможно, это сработает, но я хотел бы получить строку формата, которую я могу передать в Grid Control или что-нибудь еще, что понимает.Чистое форматирование, чтобы оно могло сделать форматирование для меня, и я могу просто дать ему фактическое значение. – NotDan

4
string.Format("{0:#,##0.############}", value); 

даст вам до 12 знаков после запятой.

Не существует специального спецификатора формата для «всех следующих цифр», поэтому что-то вроде этого будет ближе всего к тому, что вы хотите.

Обратите внимание, что вы ограничены точностью своей переменной. A double имеет только 15-16 цифр точности, так как ваша левая сторона становится больше, число десятичных знаков упадет.

-1

Вот как-то добраться до ваших ожиданий ...

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

+0

Возможно, потому, что вы делаете двойное нажатие на строку. –

Смежные вопросы