C# 设置类似于ToString(“G29”)的十进制数加上千位分隔符的格式
我需要在decimal类型的变量中显示一些数字 我想把它们几乎原样地显示出来,这是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
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