Decimal.toString() для любого региона, использующего VB.NET

У меня есть приложение, которое имеет дело с валютой. В целях отображения я использую изящную функцию VB FormatCurrency, которая будет форматировать на основе настройки региона ОС. Итак, если во Франции вы можете получить 123,45, тогда как в США вы получите 123,45.

Чтобы выполнить расчет этих сумм, я использую CDec() для преобразования в десятичное число.

Моя проблема в том, что когда я конвертирую десятичное число в строку с помощью toString(), оно форматируется в соответствии с текущим установленным регионом. Мне нужно иметь возможность всегда преобразовывать десятичное число в строковое представление для США, т.е. с десятичными точками.

Я думал, что смогу сделать что-то подобное: .toString("#0.00")


person perpetualbeta    schedule 14.04.2009    source источник


Ответы (3)


Попробуйте передать InvariantCulture в метод ToString():

Dim dec As Decimal = 1.25D
dec.ToString(System.Globalization.CultureInfo.InvariantCulture);
//writes 1.25
person Rex M    schedule 14.04.2009

Пытаться:

value.ToString("C", CultureInfo.InvariantCulture)

Дополнительная информация здесь:
http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx

«C» предназначен для форматирования валюты, но вы можете использовать множество различных строк формата. Если вы действительно хотите, чтобы он был отформатирован для «США», а не для инвариантной культуры, вы можете сделать это:

value.ToString("C", CultureInfo.CreateSpecificCulture("en-US"))
person Joel Coehoorn    schedule 14.04.2009

Этот

    Dim dec As Decimal = 1.25D
    Dim s As String
    s = dec.ToString("C2", System.Globalization.CultureInfo.CreateSpecificCulture("en-US"))

производит 1,25 доллара

Этот

    s = dec.ToString("N2", System.Globalization.CultureInfo.CreateSpecificCulture("en-US"))

производит 1,25

person dbasnett    schedule 14.04.2009