Как отформатировать строку как вьетнамскую валюту?

Если я установлю формат в [Регион и язык] на США...

CultureInfo cul = CultureInfo.CurrentCulture;
string decimalSep = cul.NumberFormat.CurrencyDecimalSeparator;//decimalSep ='.'
string groupSep = cul.NumberFormat.CurrencyGroupSeparator;//groupSep=','
sFormat = string.Format("#{0}###", groupSep);
string a = double.Parse(12345).ToString(sFormat);

Результат: 12,345 (верно)

Но если я установлю формат в [Регион и язык] на Вьетнам, то результат будет таким: 12345

Результат должен быть 12.345.

Можете вы помочь мне? Спасибо.


person David    schedule 01.09.2012    source источник
comment
Тогда как они пишут это en-us 12,345.23 ? Это 12.345.23?   -  person Nikhil Agrawal    schedule 01.09.2012
comment
@NikhilAgrawal 12.345,23 См. Десятичный знак   -  person Danh    schedule 26.12.2015


Ответы (2)


Ты слишком много помогаешь. Спецификатор формата нечувствителен к культуре, вы всегда используете запятую, чтобы указать, куда идет символ группировки. Который затем заменяется фактическим символом группировки при форматировании строки.

Это форматирует правильно:

        CultureInfo cul = CultureInfo.GetCultureInfo("vi-VN");   // try with "en-US"
        string a = double.Parse("12345").ToString("#,###", cul.NumberFormat);

На самом деле вы должны использовать «#, #», чтобы убедиться, что он по-прежнему работает в культурах с необычной группировкой. Из вопроса не было ясно, имеет ли это значение или нет, поэтому я указал на «#,###».

person Hans Passant    schedule 01.09.2012

Попробуйте что-то вроде этого:

var value = 8012.34m;
var info = System.Globalization.CultureInfo.GetCultureInfo("vi-VN");
Console.WriteLine(String.Format(info, "{0:c}", value));

Результат:

8.012,34 ₫

О, и со значением 12345 результат будет 12.345,00 ₫.

person Enigmativity    schedule 01.09.2012