不同国家/地区的格式货币

时间:2018-03-12 19:02:55

标签: c# .net xaml xamarin.forms

我正在使用Xamarin Forms,我尝试使用以下形式格式化字符串(在XAML视图中):1.235.436,00其中逗号,是小数点分隔符。首先,我使用StringFormat{0:C2},结果是:$1,235,436.00适用于美国。之后,我尝试StringFormat{0:#,0.#0},结果:1,235,436.00

最后,我尝试通过交换点和逗号{0:#.0,#0}来使用相同的逻辑,结果得到:1235436.000

那么我如何格式化法国,西班牙,瑞典等货币。 这是0.000.000,00 €/kr

XAML代码:

Label Text="{Binding value, StringFormat='{0:C2}.'}"

在我的情况下哪个不正确。

4 个答案:

答案 0 :(得分:4)

您不能使用StringFormat直接在绑定中执行此操作。您可以实现自定义IValueConverter或创建string属性,然后在代码中实现格式:

1235436.ToString("C2", CultureInfo.CreateSpecificCulture("es-ES"));

这会将数字格式化为具有特定西班牙文化显示设置的货币。

您还可以修改默认文化格式以强制使用特定格式:

var culture = CultureInfo.CreateSpecificCulture("en-US");
culture.NumberFormat.CurrencyDecimalSeparator = ",";
culture.NumberFormat.CurrencyGroupSeparator = ".";

但你不应该这样做。文化默认值以用户期望显示内容的方式设置。默认格式的更改可能会导致误解。

答案 1 :(得分:2)

您使用的格式{0:C2}是正确的格式。要根据区域更改格式,您需要更改线程上的文化。看起来你已将它设置为默认en-US,就像你说的那样。您可以这样检查:

  CultureInfo current = CultureInfo.CurrentCulture;
  Console.WriteLine("The current culture is {0}", current.Name);

将其更改为法国:

  CultureInfo.CurrentCulture = new CultureInfo("fr-FR");

现在,您的值将自动格式化为1.235.436,00

答案 2 :(得分:0)

您尝试的方式:

// Get Present Culture in app.

var ci = new CultureInfo(App.DeviceCulture);

//转换为字符串格式。

stringValue = ConvertCultureCurrencyToString(stringValue, ci);

//创建方法转换为格式

public static string ConvertCultureCurrencyToString(string stringValue, CultureInfo ci)
    {
        try
        {
            if (string.IsNullOrEmpty(stringValue))
                return "0";

            stringValue = System.Convert.ToString(stringValue, ci);
            // currency -> double (format to double)
            var currency = decimal.Parse(stringValue, NumberStyles.AllowDecimalPoint | NumberStyles.AllowThousands, ci);

            stringValue = currency.ToString("#,###.###", ci);

            if (stringValue.FirstOrDefault() == '.' || stringValue.FirstOrDefault() == ',')   
                stringValue = $"0{stringValue}";

            return stringValue;
        }
        catch
        {
            return "0";
        }

    }

答案 3 :(得分:0)

在xaml.cs中添加代码行。这将转换区域性

CultureInfo myCurrency = new CultureInfo("en-US");
CultureInfo.DefaultThreadCurrentCulture = myCurrency;

在xaml中

<Label Text="{Binding value, StringFormat='{0:#,0.#0}'}"

结果:5,245.00

我通过列表获取此信息