格式化特定精度范围内的货币

时间:2014-06-10 14:53:00

标签: c# string-formatting

我正在尝试格式化始终包含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

3 个答案:

答案 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;