十进制ToString格式,至少给出1位数,没有上限

如何在decimal后至少有一位数字格式化C#中的小数,但如果指定小数点后多于1位,则不是固定的上限:

 5 -> "5.0" 5.1 -> "5.1" 5.122 -> "5.122" 10.235544545 -> "10.235544545" 

使用ToString("0.0###########################")

一些笔记:

  • 那里有27个s,因为decimal结构可以容纳精确到28位小数。
  • 即使值为0自定义说明符也会始终显示数字。
  • #自定义说明符仅在数字为零时显示一个值,并且该数字右/左的所有数字(取决于您所在的小数点的哪一侧)为零。
  • 您将需要在小数点右边的第一个0之后插入尽可能多的#以容纳您将传递给ToString的所有值的长度,如果您只有精确到10个小数位,那么您需要9个# (因为你有第一个小数位到右边处理0

有关详细信息,请参阅标题为“自定义数字格式字符串”的MSDN部分。

 [TestClass] public class UnitTest1 { [TestMethod] public void TestMethod1() { var a = 5m; var b = 5.1m; var c = 5.122m; var d = 10.235544545m; var ar = DecToStr.Work(a); var br = DecToStr.Work(b); var cr = DecToStr.Work(c); var dr = DecToStr.Work(d); Assert.AreEqual(ar, "5.0"); Assert.AreEqual(br, "5.1"); Assert.AreEqual(cr, "5.122"); Assert.AreEqual(dr, "10.235544545"); } } public class DecToStr { public static string Work(decimal val) { if (val * 10 % 10 == 0) return val.ToString("0.0"); else return val.ToString(); } } 
 Func FormatDecimal = d => ( d.ToString().Length <= 3 || !d.ToString().Contains(".")) ? d.ToString("#.0") : d.ToString() );