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

时间:2015-04-16 23:15:00

标签: c# formatting number-formatting

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

我希望尽可能地显示它们,ToString("G29")给了我。

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

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

   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问题/答案让我意识到" G29"以科学计数形式返回小于0.0001的值。因此,当我写这个问题时,我不知道解决方案需要处理这样的特殊情况:

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

3 个答案:

答案 0 :(得分:2)

你可能需要做一些工作。 怎么样?

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

答案 1 :(得分:1)

你必须格式化字符串。

尝试:

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

修改

以上情况非常接近。这给出了完全理想的结果:

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

答案 2 :(得分:1)

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

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