c#中decimal的去0显示
在近来的开发中,遇到到了decimal中显示0的问题,搞了很久才搞好了,现在就简单介绍一下其中一小部分,其他的网上很上很多
public static string DecimalToString(decimal d)
{
return d.ToString("#0.######");
}
这个的显示很简单给几个例子就懂了,注意第一个结果,是会四舍五入的
private void button1_Click(object sender, EventArgs e)
{
decimal d0 = 0.0000006m;
decimal d1 = 0.005000m;
decimal d2 = 1.00005m;
decimal d3 = 200.00000m;
decimal d4 = 200.00006m;
Console.WriteLine(DecimalToString(d0));
Console.WriteLine(DecimalToString(d1));
Console.WriteLine(DecimalToString(d2));
Console.WriteLine(DecimalToString(d3));
Console.WriteLine(DecimalToString(d4));
}
结果如下:
0.000001
0.005
1.00005
200
200.00006
后面的0会给去除,如果小于0的数,0个位还是0,这样就比较符合用户的需求的习惯。
再附加上#和0这两个符号的说明:
以下文字取自:链接
5、零占位符和数字占位符
string.Format("{0:0000.00}", 12394.039) 结果为:12394.04
string.Format("{0:0000.00}", 194.039) 结果为:0194.04
string.Format("{0:###.##}", 12394.039) 结果为:12394.04
string.Format("{0:####.#}", 194.039) 结果为:194
下面的这段说明比较难理解,多测试一下实际的应用就可以明白了。
零占位符:
如果格式化的值在格式字符串中出现“0”的位置有一个数字,则此数字被复制到结果字符串中。小数点前最左边的“0”的位置和小数点后最右边的“0”的位置确定总在结果字符串中出现的数字范围。
“00”说明符使得值被舍入到小数点前最近的数字,其中零位总被舍去。
数字占位符:
如果格式化的值在格式字符串中出现“#”的位置有一个数字,则此数字被复制到结果字符串中。否则,结果字符串中的此位置不存储任何值。
请注意,如果“0”不是有效数字,此说明符永不显示“0”字符,即使“0”是字符串中唯一的数字。如果“0”是所显示的数字中的有效数字,则显示“0”字符。
“##”格式字符串使得值被舍入到小数点前最近的数字,其中零总被舍去。
注意:这里是说有效数字,所以如果是2.00300的话2到3之间的0是有效数字,3后面的0就不是有效数字了,所以会去除。原理大概是这样,如果有补充可以评论或者联系本人。