十进制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() );