2011-03-14 60 views
1

我需要使用特定格式格式化数字。我不想与计算机的区域设置格式决定,所以我想:用于格式化的Double.ToString

string s = "219171" 
string result = Convert.ToDouble(s).ToString("0,0.0") //219,171.0 
string result = Convert.ToDouble(s).ToString("0.0,0") //219171.00 

我想它显示为

219.171,00

谢谢

+4

您需要使用格式化的文化,告诉格式化什么千位分隔符,小数点是。 – BoltClock 2011-03-14 09:33:09

回答

7

创建自定义的NumberFormatInfo实例,并调用toString()时传递英寸

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

double s = 219171; 
string result = s.ToString("N2", nfi); 

NumberFormatInfo属于System.Globalization

+0

这解决了这个问题。谢谢,第一次一个“墨菲”对我的生活有任何好处:) – Pabuc 2011-03-14 09:49:04

3

您可以指定您希望在Double.ToString(IFormatProvider provider)过载中格式化的区域设置。它不提供它,将使用Thread.CurrentThread.CurrentUILocale。如果您希望它与计算机设置无关,则可以使用Double.ToString(CultureInfo.InvariantCulture)

如果您想完全自定义格式(例如十进制分隔符之前/之后的十位数字),请在formatstring overview中查看。

0

下应该做的伎俩:

string result = (Convert.ToDouble(s)/1000).ToString("##0.000\\,00"); 

除以1000改变了小数点的位置。每个#或0是一个数字。

或者,你可以使用:

string result = Convert.ToDouble(s).ToString("[email protected]").Replace('.', ',').Replace('@', '.'); 
+0

除以1000是否需要计算?当然,创建自定义格式会更容易,所需资源更少。 – 2011-03-14 09:43:00

+0

创建自定义格式更好; @墨菲11在那里做得很好。 – 2011-03-14 09:46:51

0

我可能会做这样的:

// save parsing, ignoring current settings 
double d = double.Parse(s, CultureInfo.InvariantCulture); 
// whatever culture you actually want, assuming German 
var culture = CultureInfo.GetCultureInfo("de"); 
string formatted = d.ToString(culture);