我有以下号码:4.3
对于我们的一些欧洲朋友,我想将此号码显示为4,3
。
我的印象是以下行可以解决问题:
string ret = string.Format("{0:0,0}", 4.3); // returns "04", not "4,3"
我使用的是不正确的字符串吗?
答案 0 :(得分:31)
我想:
string.Format(System.Globalization.CultureInfo.GetCultureInfo("de-DE"), "{0:0.0}", 4.3);
应该做你想做的事。
答案 1 :(得分:31)
NumberFormatInfo nfi = new NumberFormatInfo();
nfi.NumberDecimalSeparator = ",";
nfi.NumberGroupSeparator = ".";
double num = 4.3;
string ret = num.ToString(nfi); // 4,3
答案 2 :(得分:11)
这取决于你想做什么。如果您想让整个应用程序为其他语言输出做好准备,请使用
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);
如果可行的话,首选方法是首选方法,因为您的应用程序中只需要一行,并且所有内容都符合预期。在第二步中,您必须将culture参数添加到整个应用程序中的每个String输出方法。
答案 3 :(得分:3)
对于更通用的解决方案,您可以set the thread's UI culture了解您的欧洲朋友所使用的文化。这将影响数字,货币,日期等的表示。
答案 4 :(得分:2)
默认情况下,数字格式使用当前NumberFormatInfo中的CultureInfo,以便使用计算机上的区域设置进行显示。
因此,除了确保正在使用正确的CultureInfo之外,你真的不需要做任何特别的事情。
至于问题,是字符串无效。 “,”表示千位分隔符,而不是小数分隔符。看看NumberFormatInfo和custom number formats。
答案 5 :(得分:1)
使用带逗号而不是小数点的CultureInfo(例如法语):
string.Format(CultureInfo.GetCultureInfo("fr-FR"), "{0:0.0}", 4.3);
答案 6 :(得分:1)
是的,你使用了错误的字符串,而且只提供格式化字符串也无法解决问题。
格式化字符串的作用是使用模式"0"
格式化数字,然后将其与长度0
对齐。
在格式化字符串中指定小数点分隔符时,无论当前文化如何,它始终都是句点。另一方面,格式化结果中的小数分隔符始终是当前文化使用的分隔符。因此,要在结果中将逗号作为小数分隔符,您必须确保用于格式化的文化是使用逗号作为小数分隔符的文化。
您可以为线程设置当前区域性,以便默认情况下使用格式,或者在调用中指定区域性:
string ret = String.Format(CultureInfo.GetCultureInfo(1053), "{0:0.0}", 4.3);
答案 7 :(得分:0)
设置线程文化将自动执行此转换。但是,如果要使用自定义字符串对其进行格式化,则可以执行以下操作:
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;
答案 8 :(得分:0)
如果在操作数字时使用正确的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);
如果您想进行“一次性”显示,第二种方法可行。如果要正确显示每个数字,您应该设置current thread's culture。这样,任何数字操作都将处理小数分隔符,正确分组字符和任何其他特定于文化的内容。
解析数字也是如此。如果用户输入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
(再一次,逗号是法语中的小数分隔符,并且线程的文化也设置为法语,因此它使用这种文化显示 - 因此逗号作为输出中的小数分隔符。)