Double.ToString用于格式化

时间:2011-03-14 09:31:57

标签: c# asp.net string-formatting

我需要格式化具有特定格式的数字。我不想决定使用计算机区域设置的格式,所以我正在尝试:

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 个答案:

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