Double.ToString для форматирования - PullRequest
1 голос
/ 14 марта 2011

Мне нужно отформатировать число в определенном формате.Я не хочу выбирать формат с региональными настройками компьютера, поэтому я пытаюсь:

string s = "219171"
string result = Convert.ToDouble(s).ToString("0,0.0") //219,171.0
string result = Convert.ToDouble(s).ToString("0.0,0") //219171.00

Я хочу отобразить его как

219.171,00

Спасибо

Ответы [ 4 ]

7 голосов
/ 14 марта 2011

Создайте пользовательский экземпляр NumberFormatInfo и передайте его при вызове ToString ().

NumberFormatInfo nfi = new NumberFormatInfo();
nfi.NumberGroupSeparator = ".";
nfi.NumberDecimalSeparator = ",";

double s = 219171;
string result = s.ToString("N2", nfi);

NumberFormatInfo принадлежит System.Globalization

3 голосов
/ 14 марта 2011

Вы можете указать локаль, для которой вы хотите отформатировать число в перегрузке Double.ToString(IFormatProvider provider).Если вы его не поставите, будет использоваться Thread.CurrentThread.CurrentUILocale.Если вы хотите, чтобы он не зависел от настроек компьютера, вы можете использовать Double.ToString(CultureInfo.InvariantCulture).

Если вы хотите полностью настроить форматирование (например, ровно x цифр до / после десятичного разделителя), найдите его в обзор форматных строк .

0 голосов
/ 14 марта 2011

Я бы, наверное, сделал это так:

// save parsing, ignoring current settings
double d = double.Parse(s, CultureInfo.InvariantCulture);
// whatever culture you actually want, assuming German
var culture = CultureInfo.GetCultureInfo("de");
string formatted = d.ToString(culture);
0 голосов
/ 14 марта 2011

Следующее должно сделать трюк:

string result = (Convert.ToDouble(s) / 1000).ToString("##0.000\\,00");

Деление 1000 изменяет местоположение десятичной точки. Каждый # или 0 является цифрой.

В качестве альтернативы вы можете использовать:

string result = Convert.ToDouble(s).ToString("000@000.00").Replace('.', ',').Replace('@', '.');
...