2009-12-28 9 views
1

У меня есть проблема с некоторыми форматами строк, я хочу заставить культуру при форматировании конкретных форматов:валюты Формат

get { return String.Format("{0:###,###,###,###,##0}", Convert.ToDecimal(_monthPay, new System.Globalization.CultureInfo("es-ES"))); } 

так, что я могу получить это:

$ 300.000,01

на локальном хосте работает нормально, но когда я опубликовать на сервере, я получаю это:

$ 300,000.01

Я не знаю почему !!! У меня нет доступа к серверу, поэтому я не могу изменить региональные настройки на сервере; есть ли другой способ его решения? так что я правильно работаю на локальном хосте и при публикации?

Спасибо.

+0

, что сервер? Какой язык? Вопросы, кажется, неполные. – Priyank

+0

Вы должны пометить это с помощью C#, чтобы он привлек внимание аудитории, которая могла бы ответить на нее. –

+0

Как это связано с валютой? – SLaks

ответ

1

Что вы здесь делаете, это означает, что функция Convert.ToDecimal будет выглядеть так, как будет выглядеть _monthPay. То, что вы ожидаете, это то, что строка будет отформатирована с информацией о культуре.

Вы должны говорить String.Format, что культура использования:

String.Format(new System.Globalization.CultureInfo("es-ES"), "{0:###,###,###,###,##0.##}", Convert.ToDecimal(_monthPay))); 
0

Вместо использования действительно длинного настраиваемого формата, как насчет встроенного формата валюты?

get { return Convert.ToDecimal(_monthPay).ToString("C", new System.Globalization.CultureInfo("es-ES")); } 

EDIT: перемещена информация о культуре .. Я до сих пор не думаю, что использование какой-либо массовой строки формата является правильным. Существуют встроенные соглашения о формате для валюты ...

+0

@SLaks Не бойтесь проголосовать. Сделайте свою часть. –

1
Thread.CurrentUICulture = CultureInfo.GetCultureInfo("es-ES"); 

Попробуйте положить это в некоторый блок инициализации.

5

Вы отправляете CultureInfo в неправильном месте.

Пройдя CultureInfo до Convert.ToDecimal, вы сообщаете Convert.ToDecimal, чтобы преобразовать число, используя эту культуру. (Это имеет значение, если _monthPay является строкой и нуждается в анализе)
Однако вы не прошли CultureInfo до String.Format, поэтому он по-прежнему использует культуру по умолчанию.

Кстати, вы должны использовать только String.Format, если вы комбинируете несколько значений. В вашем случае вы должны вызвать перегрузку ToString. Кроме того, ваша строка формата бесполезно длинна; вы можете просто написать #,0. Если вы хотите включить символ валюты, вы можете просто использовать C.

Таким образом, вы должны написать Convert.ToDecimal(_monthPay).ToString("#,0", new System.Globalization.CultureInfo("es-ES")).

+0

Вы также можете передать 'CultureInfo' в качестве первого аргумента в' String.Format': 'String.Формат (new CultureInfo («es-ES»), «{0: ###, ###, ###, ###, ## 0}", value) ' –

+0

Да, но он не должен быть используя 'String.Format' в первую очередь. – SLaks

+0

Честно говоря, он тоже не нуждается в огромной строке формата. Он может заменить его одним «С», чтобы получить формат валюты. –

1
get 
{ 
    var culture = new System.Globalization.CultureInfo("es-ES"); 
    return Convert 
     .ToDecimal(_monthPay, culture) 
     .ToString("###,###,###,###,##0", culture); 
}