将数字格式化为字符串,使用逗号代替小数

Dav*_*Dev 13 .net c# globalization formatting numbers

我有以下号码: 4.3

我想把这个号码显示4,3给我们的一些欧洲朋友.

我的印象是以下行可以解决问题:

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

我使用的是不正确的字符串吗?

JDu*_*ley 31

我认为:

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

应该做你想做的事.

  • 我们也会处理成千上万的问题,这些问题也有所不同. (3认同)
  • 但它的缺点是你必须在你的代码中的EVERY ToString,String.Format,Number.Parse和类似方法中手动插入文化信息. (3认同)

Luk*_*keH 31

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

double num = 4.3;
string ret = num.ToString(nfi);    // 4,3
Run Code Online (Sandbox Code Playgroud)

  • @Groo:这不是问题所在.它特别指出"将此数字显示为4,3"**而不是**"根据用户的区域设置(包括他/她的自定义设置)显示此数字". (6认同)
  • @Mats:如果您决定选择任意欧洲`CultureInfo`对象(例如,"de-DE"或"fr-FR")并且该文化已被定制为使用不同的小数分隔符,会发生什么?我知道这种情况不太可能,但可能会发生.使用我的代码,无论任何自定义,您都将获得一个`,`作为小数分隔符. (2认同)

Fox*_*ire 11

这取决于你想做什么.如果您想让整个应用程序为其他语言输出做好准备,请使用

System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo ("de-DE");
Run Code Online (Sandbox Code Playgroud)

如果你想要一个混合语言应用程序(这意味着某些输出用一种语言格式化在另一种语言中),你必须使用特定字符串函数的重载,如:

var culture =  System.Globalization.CultureInfo.GetCultureInfo("de-DE");   
String.Format (culture, "{0:0.0}", 4.3);
Run Code Online (Sandbox Code Playgroud)

如果可能的话,首选方法是首选方法,因为您的应用程序中只需要一行,并且所有内容都符合预期.在第二步中,您必须将culture参数添加到整个应用程序中的每个String输出方法.