Интервал String.Format С# между каждым числом 1000

Возможный дубликат:
Используйте пользовательский разделитель тысяч в C#

Я хочу, чтобы строковый формат форматировал мои числа следующим образом:

Input: 1000 Ouput: 1 000.00
Input: 10000 Output: 10 000.00 
Input: 100000 Output: 100 000.00

person Guybrush Threepwood    schedule 02.11.2012    source источник
comment
удивительно, что ни один из пока предоставленных ответов не сработает на 1 миллиард без дополнительных усилий. Найдите ответ Джона Скитса по ссылке выше.   -  person dwonisch    schedule 02.11.2012
comment
Ознакомьтесь с этой статьей MSDN.   -  person Alberto De Caro    schedule 02.11.2012
comment
Не забудьте пометить ответ как принятый, если он вам подходит...   -  person Pranay Rana    schedule 05.11.2012


Ответы (5)


Отлично работает, как вам не нужно дополнительное форматирование

String.Format("{0:# ###.00}", 40000);
output - "40 000.00"
String.Format("{0:# ###.00}", 400000);
output - "400 000.00"
String.Format("{0:# ###.00}", 4000);
output - "4 000.00"

Проверьте сообщение в блоге по этому поводу: Формат числа для отображения

person Pranay Rana    schedule 02.11.2012
comment
За исключением того, что ОП хочет 2 десятичных знака... - person Trevor Pilley; 02.11.2012
comment
не будет работать для значений больше 1 миллиона - person dwonisch; 02.11.2012
comment
@TrevorPilley - он уже обновлен ... просто запустите код, он точно сработает - person Pranay Rana; 02.11.2012
comment
@woni - он отлично работает для einput, заданного пользователем ... я не думаю, что он не будет работать для любого числа, покажите пример ошибки, если вы найдете что-либо ... - person Pranay Rana; 02.11.2012

Вы можете сделать это, используя класс NumberFormatInfo. посмотрите пример кода.

NumberFormatInfo numberFormatInfo = (NumberFormatInfo)CultureInfo.InvariantCulture.NumberFormat.Clone();          
numberFormatInfo.NumberGroupSeparator = " ";

int a = 1000;

Console.WriteLine(a.ToString("n", numberFormatInfo)); // 1 000.00
person Seminda    schedule 02.11.2012
comment
Думаю, у нас с тобой была одна и та же идея. :) - person Mike Perrenoud; 02.11.2012

Это будет работать

String.Format("{0:### ### ### ###.##}", 10000.00)

Результат:

"  10 000.00"

Вам нужно будет обрезать результат, чтобы удалить лишние пробелы.

person Trevor Pilley    schedule 02.11.2012
comment
так как это единственный ответ, который здесь работает, даже вам нужно обрезать вывод: +1 - person dwonisch; 02.11.2012

Вот, друг:

var formatInfo = new NumberFormatInfo();
formatInfo.CurrencyGroupSeparator = " ";
formatInfo.CurrencySymbol = string.Empty;

Console.WriteLine(1000.ToString("C", formatInfo));
Console.WriteLine(10000.ToString("C", formatInfo));
Console.WriteLine(100000.ToString("C", formatInfo));
person Mike Perrenoud    schedule 02.11.2012

Предоставление ввода представляет собой целое число, которое вы можете использовать.

input.ToString("F");

РЕДАКТИРОВАТЬ: мой плохой, не видел пробелов в форматировании, думал, что это только для десятичных значений

Еще один быстрый способ, возможно, не самый лучший, — преобразовать его в строку валюты, удалить символ валюты впереди и заменить «,» на «.»

e.g.

input.ToString( "C" );
input.Replace( "," , "." );
input.Remove( 0, 1 ); //or the amount of characters in currency symbol if more than one
person Bart    schedule 02.11.2012