格式化数字与逗号的字符串代替小数格式化数字与逗号的字符串代替小数(Formatting Number

2019-05-12 01:55发布

我有以下数: 4.3

我想显示此数字为4,3对于我们的一些欧洲朋友。

我的印象是,以下行会做的伎俩下:

string ret = string.Format("{0:0,0}", 4.3); // returns "04", not "4,3"

我使用了不正确的字符串?

Answer 1:

我认为:

string.Format(System.Globalization.CultureInfo.GetCultureInfo("de-DE"), "{0:0.0}", 4.3); 

应该做你想要什么。



Answer 2:

NumberFormatInfo nfi = new NumberFormatInfo();
nfi.NumberDecimalSeparator = ",";
nfi.NumberGroupSeparator = ".";

double num = 4.3;
string ret = num.ToString(nfi);    // 4,3


Answer 3:

这取决于你想要做什么。 如果你想使你的整个应用程序准备好了一些其他语言输出只是使用

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);

第一种方法是首选,如果它是可能的,因为你只需要在应用程序中单独一行,一切都会如预期。 在第二,你必须培养参数在整个应用程序添加到每个字符串输出中的方法。



Answer 4:

为了更广泛的解决方案,可以设置线程的UI文化被你的欧洲朋友使用的文化。 这将影响数字,货币,日期等的介绍



Answer 5:

默认的数字格式使用的NumberFormatInfo从目前的CultureInfo ,使其显示使用计算机上的区域设置。

因此,你并不真的需要做什么特别的地方,也许除了确保正在使用正确的CultureInfo。

至于这个问题,是该字符串是无效的。 A“”表示千分隔符,而不是小数分隔符。 深入了解的NumberFormatInfo和自定义数字格式 。



Answer 6:

使用具有逗号而不是小数点(法国比如)一个的CultureInfo:

string.Format(CultureInfo.GetCultureInfo("fr-FR"), "{0:0.0}", 4.3);


Answer 7:

是的,你使用了错误的字符串,也是这个问题不能只提供一个格式化字符串来解决。

你的格式化字符串确实是格式化使用模式数字"0" ,然后对准长度0

当你在一个格式化字符串指定小数点分隔符它总是一个时期,无论当前的文化。 在另一方面格式化的结果的小数点是总是由当前培养中使用的一个。 因此,要获得一个逗号作为你必须确保用于格式化的文化是一个使用逗号作为小数点分隔符的结果小数点分隔符。

您可以设置线程当前区域性以便它默认使用的格式,或指定呼叫文化:

string ret = String.Format(CultureInfo.GetCultureInfo(1053), "{0:0.0}", 4.3);


Answer 8:

设置线程的文化会自动完成这种转换。 不过,如果你想用一个自定义字符串,你可以做以下的格式如下:

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;


Answer 9:

数字格式可以为你的框架,如果你使用了正确处理文化操纵数时。

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 (再次,逗号是法语小数点分隔,也是线程培养被设置为法语,所以它显示使用该培养 - 因此逗号作为在输出端的小数分隔)。



文章来源: Formatting Numbers as Strings with Commas in place of Decimals