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

C# 设置类似于ToString(“G29”)的十进制数加上千位分隔符的格式,c#,formatting,number-formatting,C#,Formatting,Number Formatting,我需要在decimal类型的变量中显示一些数字 我想把它们几乎原样地显示出来,这是ToString(“G29”)给我的 但是,我想添加一个千分隔符ToString(“N”)给了我数千个分隔符,但完全失去了“G29善良” 是否有一个简单的解决方案来获取我想要的显示字符串 value "N" "G29" What I Want ============= ========== ========== ============== 296018.413

我需要在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 值“N”“G29”我想要的值 ============= ========== ========== ============== 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 珍惜我想要的 ============ ============= 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).Trim(new [] { '0', '.' });

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

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

有帮助吗?很接近,但它保留了所有的尾随零。例如,296018.413000000000000000000000000000000000。也许我会用你的解决方案把零去掉。这比添加逗号简单。第二个建议不适用于以下值:
1000
1000.00
。哦,天哪!艾哈迈德是对的!以上将[420]变成[42]!我将更改已接受的答案。
string.Format({0:N29}),yourWeight.TrimEnd(new[]{0'})。TrimEnd(new[]{.'})
工作正常,不是吗?这个答案非常接近,但是因为“G29”返回的科学符号的数字低于0.0001,所以它会失败,返回12.0000123这样的数字(它返回“12.23E-05”)。
decimal d = 12345.000067m;
string s = d.ToString("#,###0.############################"); // 28 #'s after the decimal