按当前语言环境格式化字符串

时间:2013-01-03 10:24:33

标签: c#

在我的C#应用​​程序中,我使用字符串

string sTemp = "10.12;12.13;15.345";

现在我想知道是否有任何方法可以根据当前语言环境格式化此字符串及其内容(特别是当它们是数字时)。最终我希望我的sTemp应该是 - 法国语言环境中的“10,12; 12,13; 15,345”。

有可能吗?

3 个答案:

答案 0 :(得分:2)

string sTemp = "10.12;12.13;15.345";
string[] splitted = sTemp.Split(';');
IEnumerable<float> floats = splitted.Select(s => float.Parse(s, System.Globalization.CultureInfo.InvariantCulture));

string localized = floats.Select(f => f.ToString()).Aggregate((current, next) => current + ";" + next);

答案 1 :(得分:1)

使用String.Split(';')分割字符串双精度,double.ParseCultureInfo.InvariantCulture分析输入,double.ToString分别CultureInfo.CurrentCulture(或“fr-FR” )解析输出:

string sTemp = "10.12;12.13;15.345";

var doubles = sTemp.Split(';')
    .Select(s => double.Parse(s, CultureInfo.InvariantCulture));

var locale = System.Globalization.CultureInfo.CreateSpecificCulture("fr-FR");
// or var locale = System.Globalization.CultureInfo.CurrentCulture;

var localeDoubleStrings = doubles.Select(d => d.ToString(locale));
foreach(string frDoubleStr in localeDoubleStrings)
    Console.WriteLine(frDoubleStr);

Demo

答案 2 :(得分:0)

我猜你正在使用带有内容的字符串,在这种情况下你需要格式化

实施例

// this would be as per french culture
Console.WriteLine(string.Format(new CultureInfo("Fr-fr"), "{0};{1};{2};", 10.2, 15.6, 25.3));
// this would be invariant
Console.WriteLine(string.Format(CultureInfo.InvariantCulture, "{0};{1};{2};", 10.2, 15.6, 25.3));

所以你需要说CultureInfo.CurrentCulture,这应该适合你。

但如果您将其与内容一起使用,那么您必须更新有关如何构建字符串内容的问题