我需要使用特定格式格式化数字。我不想与计算机的区域设置格式决定,所以我想:用于格式化的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
谢谢
我需要使用特定格式格式化数字。我不想与计算机的区域设置格式决定,所以我想:用于格式化的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
谢谢
创建自定义的NumberFormatInfo实例,并调用toString()时传递英寸
NumberFormatInfo nfi = new NumberFormatInfo();
nfi.NumberGroupSeparator = ".";
nfi.NumberDecimalSeparator = ",";
double s = 219171;
string result = s.ToString("N2", nfi);
NumberFormatInfo
属于System.Globalization
这解决了这个问题。谢谢,第一次一个“墨菲”对我的生活有任何好处:) – Pabuc 2011-03-14 09:49:04
您可以指定您希望在Double.ToString(IFormatProvider provider)
过载中格式化的区域设置。它不提供它,将使用Thread.CurrentThread.CurrentUILocale
。如果您希望它与计算机设置无关,则可以使用Double.ToString(CultureInfo.InvariantCulture)
。
如果您想完全自定义格式(例如十进制分隔符之前/之后的十位数字),请在formatstring overview中查看。
下应该做的伎俩:
string result = (Convert.ToDouble(s)/1000).ToString("##0.000\\,00");
除以1000改变了小数点的位置。每个#或0是一个数字。
或者,你可以使用:
string result = Convert.ToDouble(s).ToString("[email protected]").Replace('.', ',').Replace('@', '.');
除以1000是否需要计算?当然,创建自定义格式会更容易,所需资源更少。 – 2011-03-14 09:43:00
创建自定义格式更好; @墨菲11在那里做得很好。 – 2011-03-14 09:46:51
我可能会做这样的:
// 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);
您需要使用格式化的文化,告诉格式化什么千位分隔符,小数点是。 – BoltClock 2011-03-14 09:33:09