2014-11-27 4 views
0

Я использую конвертер для своего текстового поля для валюты. Все отлично работает, за исключением того, что символ -sign стоит после значения, а не раньше.Формат валюты с символом до, а не после

Вот код:

public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
{ 
    var dValue = value as decimal?; 
    return string.Format(CultureInfo.GetCultureInfo("de-DE"), "{0:C}", dValue ?? 0); 
} 

Я знаю, что могу легко поставить его перед ним, а после, как так:

public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
{ 
    var dValue = value as decimal?; 
    return "€ " + string.Format(CultureInfo.GetCultureInfo("de-DE"), "{0:C}", dValue ?? 0).Replace("€", "").Trim(); 
} 

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

Например: С десятичного 12345678.90, я не хочу, чтобы отобразить [см первый метод] 12.345.678,90 €, но я хочу, чтобы отобразить [см второй способ] € 12.345.678,90 вместо этого.

+0

@ Майкл Все еще не дает ничего существенного, как я должен использовать немецкую/французскую CultureInfo, но вместо символа валюты вместо символа валюты следует использовать символ 0. –

+0

вы попробовали мой код? – faby

ответ

0

пытаются таким образом

public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
{ 
    var dValue = value as decimal?; 
    Thread.CurrentThread.CurrentCulture = new CultureInfo("de"); 
    var nfi = (NumberFormatInfo)NumberFormatInfo.CurrentInfo.Clone(); 
    nfi.CurrencySymbol = "€"; 
    return string.Format(nfi,"{0:c}",dValue) 
} 

, если он не работает, попробуйте без этой линии

Thread.CurrentThread.CurrentCulture = new CultureInfo("de"); 

, если он не работает снова попробуйте изменить CurrencyNegativePattern собственности и CurrencyPositivePattern собственности со значением 2

nfi.NumberFormat.CurrencyPositivePattern = 2; 
nfi.NumberFormat.CurrencyNegativePattern = 2; 

2 означает «€ + number»

0

Попробуйте это (быстрый код, на самом деле не единичный метод тестирования, просто чтобы увидеть результат).

[Test] 
public void CurrencySymbolShouldAppearBeforeValue() 
{ 
    decimal price = 1370m; 
    var formatInfo = CultureInfo.GetCultureInfo("de-DE") 
           .NumberFormat.Clone() as NumberFormatInfo; 

    Assert.IsNotNull(formatInfo); 

    formatInfo.CurrencyPositivePattern = 2; 

    string formated = price.ToString("C3", formatInfo); 
    Assert.IsNotNull(formated); 
} 

Выходы:€ 1.370,000

Вы можете прочитать более here.