如何格式化小数而不尾随零

Mar*_*der 10 c# decimal tostring string-formatting

我刚才知道小数以某种方式记住存储一个数字需要多少trailaing零.换句话说:它记住了分数的大小.

例如:

123M.ToString() ==> resuls in: 123
123.00M.ToString() ==> resuls in: 123.00
123.450M.ToString() ==> resuls in: 123.450
Run Code Online (Sandbox Code Playgroud)

我正在寻找一个格式化字符串或另一个技巧来摆脱那些"不需要的"尾随零,但保持有效数字.所以:

123M.ToString() ==> resuls in: 123
123.00M.ToString() ==> resuls in: 123
123.450M.ToString() ==> resuls in: 123.45
Run Code Online (Sandbox Code Playgroud)

删除新字符串末尾的零对我来说不是一个真正的选择,因为那时我必须找出字符串是否包含一个分数,如果是,还必须删除可选的'.'.或','取决于文化等

Mik*_*ins 11

有几种方法可以做到这一点,但是既然你要转换为String对象,我想你可以试试这样的东西:

myDecimalVariable.ToString("G29");

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

123.00M.ToString("G29");

以下是该简洁示例如何工作的解释:

带有数字的G格式表示格式化许多有效数字.因为29是十进制可以具有的最高有效数字,所以这将有效地截断尾随零而不进行舍入.

  • 有关G29可能无法按预期工作的某些情况,请参阅[此评论](http://stackoverflow.com/questions/4525854/remove-trailing-zeros/4525896#comment8733932_4525983). (5认同)
  • 而"G0"`的工作方式相同.请参阅[标准数字格式字符串 - 常规("G")格式说明符](http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx#GFormatString). (3认同)
  • 我绝对同意.谢谢. (2认同)