C# 如何格式化不带尾随零的十进制数

C# 如何格式化不带尾随零的十进制数,c#,decimal,string-formatting,tostring,C#,Decimal,String Formatting,Tostring,我刚刚了解到,一个十进制数不知怎的记住了存储一个数字需要多少零值。换句话说:它记住分数的大小 例如: 123M.ToString() ==> resuls in: 123 123.00M.ToString() ==> resuls in: 123.00 123.450M.ToString() ==> resuls in: 123.450 我正在寻找一个格式化字符串或其他技巧,以摆脱那些“不必要的”尾随零,但保留有效数字。因此: 123M.ToString() ==> r

我刚刚了解到,一个十进制数不知怎的记住了存储一个数字需要多少零值。换句话说:它记住分数的大小

例如:

123M.ToString() ==> resuls in: 123
123.00M.ToString() ==> resuls in: 123.00
123.450M.ToString() ==> resuls in: 123.450
我正在寻找一个格式化字符串或其他技巧,以摆脱那些“不必要的”尾随零,但保留有效数字。因此:

123M.ToString() ==> resuls in: 123
123.00M.ToString() ==> resuls in: 123
123.450M.ToString() ==> resuls in: 123.45

删除新字符串末尾的零对我来说不是一个真正的选项,因为这样我就必须找出字符串是否包含小数,如果是,还必须删除可选的“.”或“,”,具体取决于区域性等。

有几种方法可以做到这一点,但由于您正在转换为字符串对象,我想你可以试试这样的东西:

myDecimalVariable.ToString(“G29”)

或者,使用上面的代码,假设
123.00M
是小数:

123.00M.ToString(“G29”)

以下是该简明示例的工作原理说明:

带数字的G格式意味着格式化许多重要的 数字。因为29是小数点所能达到的最高有效位数 如果有,这将有效地截断尾随零,而不会 四舍五入


只需应用格式说明符zero并删除尾随的零:

string test = (1.23M * 100M).ToString("0");
//prints 123.
string test2 = 123.450M.ToString(".00");
//prints 123.45.
string test3 = 123.450M.ToString().Trim('0');

方法如下(我认为关于这个话题的最佳答案可能是重复的,它更老,有更好的答案和评论。关于G29可能无法按预期工作的一些案例,请参见。对,但他的例子没有包括任何这些案例,所以我认为这是最容易得到他想要的东西的方法。但这很好知道。你是答案的n没错,但我认为如果其他人遇到此线程,这可能值得一提。我完全同意。谢谢。而且
“G0”
的工作方式也一样。请参阅。注意
Trim('0')
将导致
0.5m
被格式化为
.5
,而不是
0.5