2014-11-27 2 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으로, I는 표시를 12.345.678,90 € [첫 번째 방법 참조] 싶지 않지만, 표시 € 12.345.678,90 대신 [두 번째 방법 참조] 싶다.

+0

@Michael @Michael은 독일/프랑스 CultureInfo를 사용해야하는 방식을 여전히 중요하게 여기지 않고 대신 통화 기호를 넣습니다. –

+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

2는 "€ + 숫자"

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 자세한 내용을보실 수 있습니다.