如何格式化C#十进制以删除额外的0?

Sco*_*ord 46 c# format decimal tostring

我想将字符串格式化为十进制,但十进制在小数点后包含一些后续零.我如何格式化它以使那些无意义的0消失?

string.Format("{0}", 1100M);
string.Format("{0}", 1100.1M);
string.Format("{0}", 1100.100M);
string.Format("{0}", 1100.1000M);
Run Code Online (Sandbox Code Playgroud)

显示:

1100
1100.1
1100.100
1100.1000
Run Code Online (Sandbox Code Playgroud)

但我希望它是:

1100
1100.1
1100.1
1100.1
Run Code Online (Sandbox Code Playgroud)

作为参考,这里有其他问题基本上与此重复,我感谢这里给出的答案:

Her*_*tar 80

您可以使用ToString()常规("G")格式说明,以达到预期的效果.使用具有指定精度的此格式字符串时,将截断尾随零.为了防止在任何情况下进行舍入,您需要将精度设置为小数的最大允许值(29).

产生你想要的代码行,你的原始十进制number.ToString("G29")在哪里number.

请注意,任何小于0.0001的数字都将转换为科学记数法.有关此格式化程序如何工作的更多详细信息,请参阅上面的参考链接.

  • 我认为这是问题的最佳解决方案. (5认同)
  • 同意 - 切换答案.谢谢@Herohtar. (2认同)
  • 警告:注意像 0.000001 这样的值。G29 格式将以尽可能短的方式呈现它们,因此它将切换到指数表示法。string.Format("{0:G29}", decimal.Parse("0.00000001",System.Globalization.CultureInfo.GetCultureInfo("en-U‌ S"))) 将给出“1E-08”作为结果。归功于这里的康拉德:http://stackoverflow.com/questions/4525854/remove-trailing-zeros/4525983#4525983 (2认同)

Jas*_*Alt 21

string s = d.ToString("0.#############################");
Run Code Online (Sandbox Code Playgroud)