格式化类似于 ToString("G29") 的十进制数字加上千位分隔符

Formatting a decimal number similar to ToString("G29") plus a thousands separator

我需要在小数类型的变量中显示一些数字。

我想几乎按原样显示它们,这 ToString("G29") 给了我。

但是,我想添加一个千位分隔符。 ToString("N") 给了我千位分隔符但完全失去了 "G29 goodness".

是否有简单的解决方案来获取我想要的显示字符串?

   value         "N"        "G29"      What I Want  
============= ==========  ==========  ==============
296018.413    296,018.41  296018.413   296,018.413   
652609        652,609.00  652609       652,609       
296.018413    296.02      296.018413   296.018413
326.305       326.31      326.305      326.305   

编辑:

另一个 SO question/answer 最近让我意识到 "G29" returns 的值在科学记数法中小于 0.0001。所以当我写这个问题时,我不知道解决方案需要处理像这样的特殊情况:

  value        What I Want  
============  =============
0.00001       0.00001
12345.000067  12,345.000067

您可能需要做一些变通。 这个怎么样?

decimal d = 34561.2223400M;
string decimalPart = (d - (int)d).ToString("G29");
string integerPart = d.ToString("##,###");
string finalNumber = integerPart + decimalPart.Substring(1,decimalPart.Length-1);;

您必须格式化字符串。

尝试:

string yourString = String.Format("{0:N29}", yourWeight);

编辑:

以上非常接近。这给出了预期的结果:

string yourString = String.Format("{0:N29}", yourWeight).Trim(new [] { '0', '.' });

有一个非常简单的解决方案,尽管它涉及相当长的格式字符串。

decimal d = 12345.000067m;
string s = d.ToString("#,###0.############################"); // 28 #'s after the decimal