2009-04-15 2 views
31

Я пытаюсь использовать символ ',' как разделитель тысяч при отображении строки, но вместо этого использовать пробел. Наверное, мне нужно определить собственную культуру, но, похоже, я не понимаю. Любые указатели?Использовать пользовательский разделитель тысяч в C#

например: дисплей +1000000 как 1 000 000 вместо 1000000

(нет, String.Replace() не решение, которое я хотел бы использовать: P)

+0

Что случилось с использованием String.Replace()? –

+1

@Jon B - потому что Replace не будет независимым от культуры. Что делать, если вы работаете на компьютере, где находится тысяча секунд. ? –

+0

, и поскольку я уже форматирую число, это будет загромождать код – Luk

ответ

63

Я предлагаю вам найти NumberFormatInfo, который наиболее близко соответствует что вы хотите (т. е. правильно, кроме разделителя тысяч), наберите Clone(), а затем установите свойство NumberGroupSeparator. (Если вы собираетесь форматировать номера с использованием валютных форматов, вам нужно вместо этого изменить CurrencyGroupSeparator.) Используйте это как информацию о формате для своих звонков на string.Format и т. Д., И все должно быть в порядке. Например:

using System; 
using System.Globalization; 

class Test 
{ 
    static void Main() 
    { 
     NumberFormatInfo nfi = (NumberFormatInfo) 
      CultureInfo.InvariantCulture.NumberFormat.Clone(); 
     nfi.NumberGroupSeparator = " "; 

     Console.WriteLine(12345.ToString("n", nfi)); // 12 345.00 
    } 
} 
+0

@ Jon: Вы так быстро ... но обычно до такой степени и точны. – Lucero

+0

У этого бренда Skeet LoadBalancer есть проблемы с маршрутизации? –

+0

Вау, спасибо, Джон! – Luk

1

Самый простой способ ...

num.ToString("### ### ### ### ##0.00") 
+5

Несмотря на то, что это работает, оно фактически создает пробелы перед номером. Например, у номера 1 будет 4 пробела перед ним. По крайней мере, вам придется обрезать его. Я считаю, что лучшим решением является настройка NumberFormatInfo, если вы хотите переопределить формат по умолчанию для культуры. – Johncl

4

Там есть несколько упрощенный вариант Jon тарелочкам один:

using System; 
using System.Globalization; 

class Test 
{ 
    static void Main() 
    { 
     NumberFormatInfo nfi = new NumberFormatInfo {NumberGroupSeparator = " ", NumberDecimalDigits = 0}; 

     Console.WriteLine(12345678.ToString("n", nfi)); // 12 345 678 
    } 
} 

И «НПТ» инициализация может быть пропущена, и поместить непосредственно в качестве параметра в ToString().

+0

Это в основном ответ Джона Скита, переписанный. Не совсем креативный или короткий! –

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