我正在寻找一个将浮动显示为货币的DataFormatString。但如果它们不相关(0),则省略小数值。
目前我正在使用:
[DisplayFormat(DataFormatString = "{0:C}")]
在我的模特身上。这正确显示为货币。我无法在任何地方找到详细说明我需要做出哪些更改来省略小数位?
答案 0 :(得分:9)
[DisplayFormat(DataFormatString = "{0:C0}")]
这应该给你0小数。但是自动轮!所以,如果你有,56它将会向上舍入到1
20000,00 => 20000€
20000,56 => 20001€
20000,49 => 20000€
/ edit:我从这里借了一个想法:c# Decimal to string for currency
如果可以将浮点值转换为十进制,则可以使用此Extensionmethod省略0.它会截断小数,如果此截断值等于原始值,则会切割零。如果不是,则显示2位数字。 我知道这不是Dataformat字符串,但我不确定,它可以像注释一样简单地完成。
public static string ToCurrencyString(this decimal d)
{
return d.Equals(Decimal.Truncate(d)) ? d.ToString("0 €") : d.ToString("0.00 €");
}
答案 1 :(得分:2)
我认为没有办法明确使用货币格式,但您可以使用#
字符使用自定义格式:http://msdn.microsoft.com/en-us/library/0c899ak8.aspx
这适用于美国货币:
[DisplayFormat(DataFormatString = "{0:$#.##}")]
如果需要,#
字符只代表一个数字。
答案 2 :(得分:0)
var price = 100.0M;
var curr = price % 1 == 0 ? price.ToString("C0") : price.ToString("C");
您可以将其放在扩展方法中,并在需要的地方调用它。