我需要格式化具有特定格式的数字。我不想决定使用计算机区域设置的格式,所以我正在尝试:
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
谢谢
答案 0 :(得分:7)
创建一个自定义的NumberFormatInfo实例,并在调用ToString()时传入该实例。
NumberFormatInfo nfi = new NumberFormatInfo();
nfi.NumberGroupSeparator = ".";
nfi.NumberDecimalSeparator = ",";
double s = 219171;
string result = s.ToString("N2", nfi);
NumberFormatInfo
属于System.Globalization
答案 1 :(得分:3)
您可以指定要在Double.ToString(IFormatProvider provider)
重载中格式化数字的区域设置。它不提供它,将使用Thread.CurrentThread.CurrentUILocale
。如果您希望它与计算机设置无关,则可以使用Double.ToString(CultureInfo.InvariantCulture)
。
如果您想完全自定义格式(例如,十进制分隔符之前/之后的x位数字),请在formatstring overview中查找。
答案 2 :(得分:0)
以下应该可以解决问题:
string result = (Convert.ToDouble(s) / 1000).ToString("##0.000\\,00");
除以1000会改变小数点的位置。每个#或0都是一个数字。
或者,您可以使用:
string result = Convert.ToDouble(s).ToString("000@000.00").Replace('.', ',').Replace('@', '.');
答案 3 :(得分: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);