使用符号格式化货币而不是之后

时间:2014-11-27 15:33:40

标签: c# wpf formatting converter currency-formatting

我使用转换器为我的TextBox货币。一切都很好,除了€-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

2 个答案:

答案 0 :(得分: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”

答案 1 :(得分: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