我正在尝试格式化始终包含2个十进制数字的货币,但是如果有额外的精确数字可以显示最多5个。举个例子:
for value = 5.0 <br />
display: $5.00
for value = 5.023 <br />
display: $5.023
for value = 5.333333333333333 <br />
display: $5.33333
我一直在使用.ToString()格式,但我似乎无法找到正确的选项匹配。
澄清: 我希望显示2-5位小数,在第二位数后截断零。
for value = 5.000000000000000 <br />
display: $5.00
for value = 5.333333333333333 <br />
display: $5.33333
答案 0 :(得分:4)
C或c用于货币,后跟数字位数:http://msdn.microsoft.com/en-us/library/dwhawy9k(v=vs.110).aspx
decimal value=1.12345m;
Console.WriteLine("{0:c2}",value);
Console.WriteLine(value.ToString("c2"));
将显示$ 1.12
要保持2到5之间的位数,你必须做一些数学运算:
var digits = Math.Min(5, (int)Math.Max((byte)2, BitConverter.GetBytes(decimal.GetBits(value)[3])[2]));
Console.WriteLine(value.ToString("c" + digits));
答案 1 :(得分:2)
您可以在模型中使用also属性,以避免每次出现变量时指定格式。
[DisplayFormat(DataFormatString="{0:C2}")]
public decimal Value;
对于非可选和可选的数字使用:
value.ToString("0.00###");
答案 2 :(得分:1)
将值* 100000相乘,然后删除任何小数点并将其除以/ 100000
value = value * 100000;
value = Math.Round(value,0);
value = value /100000;