我正在使用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}.'}"
在我的情况下哪个不正确。
答案 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
我通过列表获取此信息