C#MVC.Net格式货币,不带小数

C#MVC.Net格式货币,不带小数,c#,.net,asp.net-mvc,formatting,C#,.net,Asp.net Mvc,Formatting,我正在寻找将浮动显示为货币的DataFormatString。但如果十进制值不相关(0),则忽略它们 目前我正在使用: [DisplayFormat(DataFormatString = "{0:C}")] 在我的模型上。这将正确显示为货币。我找不到任何地方可以详细说明我需要做哪些更改来省略小数点?我认为没有一种方法可以明确使用货币格式,但您可以使用字符使用自定义格式: 这适用于美国货币: [DisplayFormat(DataFormatString = "{0:$#.##}")] #字符

我正在寻找将浮动显示为货币的DataFormatString。但如果十进制值不相关(0),则忽略它们

目前我正在使用:

[DisplayFormat(DataFormatString = "{0:C}")]

在我的模型上。这将正确显示为货币。我找不到任何地方可以详细说明我需要做哪些更改来省略小数点?

我认为没有一种方法可以明确使用货币格式,但您可以使用
字符使用自定义格式:

这适用于美国货币:

[DisplayFormat(DataFormatString = "{0:$#.##}")]
#
字符仅在需要时表示数字

[DisplayFormat(DataFormatString = "{0:C0}")]
这应该给你0个小数。但是自动循环!所以如果你得到56,它将取整为1

20000,00=>20000欧元

20000,56=>20001欧元

20000,49=>20000欧元

/编辑:我从这里借用了一个想法:

如果可以将浮点值转换为十进制,则可以使用此Extensionmethod忽略0。它将截断十进制数,如果此截断值等于原始值,则会截断零。如果不是,则显示2位数字。 我知道这不是Dataformat字符串,但我不确定,它可以像注释一样简单地完成

public static string ToCurrencyString(this decimal d)
{
    return d.Equals(Decimal.Truncate(d)) ? d.ToString("0 €") : d.ToString("0.00 €");
}

您可以将其放在扩展方法中,并在需要时调用它。

的可能重复项我认为这不是重复项。上面的链接显示了一个解决方案,描述了这个问题的OP已经在使用什么。这并没有解决他关于在小数不相关的情况下省略小数的问题。我认为OP只想在小数不相关的情况下省略小数,而不是在所有情况下。是的。。。似乎我只是忽略了。。。这就是我最终的目的。在研究了小数的可能性之后,我们不太可能忽略它们。
var price = 100.0M;
var curr = price % 1 == 0 ? price.ToString("C0") : price.ToString("C");