我有一个数字:4.3
我想为我们的一些欧洲朋友显示这个数字,格式为4,3
。
我曾以为以下代码可以解决问题:
string ret = string.Format("{0:0,0}", 4.3); // returns "04", not "4,3"
我使用的字符串是否不正确?
我有一个数字:4.3
我想为我们的一些欧洲朋友显示这个数字,格式为4,3
。
我曾以为以下代码可以解决问题:
string ret = string.Format("{0:0,0}", 4.3); // returns "04", not "4,3"
我使用的字符串是否不正确?
我认为:
string.Format(System.Globalization.CultureInfo.GetCultureInfo("de-DE"), "{0:0.0}", 4.3);
应该做到你想要的。
NumberFormatInfo nfi = new NumberFormatInfo();
nfi.NumberDecimalSeparator = ",";
nfi.NumberGroupSeparator = ".";
double num = 4.3;
string ret = num.ToString(nfi); // 4,3
CultureInfo
对象(例如,“de-DE”或“fr-FR”),并且该文化已经定制为使用不同的小数分隔符,那会发生什么?我知道这是一个不太可能的情况,但它确实可能发生。使用我的代码,您将始终获得,
作为小数分隔符,而不考虑任何自定义。 - LukeH,
,您希望根据用户的区域设置(包括他/她的自定义设置)格式化字符串。 - vgru这取决于您想要做什么。如果您想使整个应用程序准备好输出其他语言,只需使用
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo ("de-DE");
如果您想要创建一个混合语言的应用程序(即一些输出使用一种语言格式化,另一些使用另一种语言格式化),则必须使用特定字符串函数的重载版本,例如:var culture = System.Globalization.CultureInfo.GetCultureInfo("de-DE");
String.Format (culture, "{0:0.0}", 4.3);
如果可能的话,推荐使用第一种方法,因为你只需要在应用程序中添加一个单行代码,就可以得到预期的结果。而在第二种方法中,你需要在整个应用程序中的每个字符串输出方法中添加区域参数。
使用具有逗号而不是小数点的CultureInfo(例如法语):
string.Format(CultureInfo.GetCultureInfo("fr-FR"), "{0:0.0}", 4.3);
是的,您正在使用错误的字符串,而且仅提供格式化字符串无法解决问题。
您的格式化字符串所做的是使用模式"0"
格式化数字,然后对齐到长度0
。
当您在格式化字符串中指定小数分隔符时,无论当前文化如何,它始终为句点。另一方面,在格式化的结果中使用的小数分隔符始终是当前文化使用的分隔符。因此,要在结果中获得逗号作为小数分隔符,必须确保用于格式化的文化是使用逗号作为小数分隔符的文化。
您可以设置线程的当前文化,以便默认情况下使用该文化进行格式化,或在调用中指定文化:
string ret = String.Format(CultureInfo.GetCultureInfo(1053), "{0:0.0}", 4.3);
设置线程文化将自动进行此转换。但是,如果您想使用自定义字符串格式化此内容,可以执行以下操作:
string ret = string.Format("{0:0.00}", 4.3);
或者
string ret = (4.3f).ToString("0.00");
"." 是当前区域设置中的十进制点格式说明符。有关自定义数字格式的更多信息,请访问:http://msdn.microsoft.com/en-us/library/0c899ak8.aspx。
您可以始终使用以下方式检查小数点字符:
string decimalChar = Thread.CurrentThread.CurrentCulture.NumberFormat.CurrencyDecimalSeparator;
如果您在操作数字时使用正确的culture,框架可以为您处理数字格式。
Console.WriteLine(4.3);
Console.WriteLine(4.3.ToString(CultureInfo.GetCultureInfo("fr-fr")));
Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("fr-fr");
Console.WriteLine(4.3);
1,234
,您如何知道他们是否输入了1.234
(逗号为小数分隔符)还是1234
(逗号为分组分隔符)?这就是文化帮助的地方,因为它知道如何显示数字,并且还可以用于正确解析它们:Console.WriteLine(double.Parse("1,234"));
Console.WriteLine(double.Parse("1,234", CultureInfo.GetCultureInfo("fr-fr")));
Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("fr-fr");
Console.WriteLine(double.Parse("1,234"));
1234
(逗号是我 en-us 默认文化中的小数分隔符),1.234
(逗号是法语中的小数分隔符)和 1,234
(同样,逗号是法语中的小数分隔符,并且线程的文化设置为法语,因此在输出中使用逗号作为小数分隔符)。