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