【问题标题】:C# MVC.Net format currency without decimalsC# MVC.Net 格式货币不带小数
【发布时间】:2013-12-05 22:55:37
【问题描述】:

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

目前我正在使用:

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

在我的模型上。这正确显示为货币。我找不到任何地方详细说明我需要进行哪些更改才能省略小数位?

【问题讨论】:

  • Currency Formatting MVC的可能重复
  • 我不认为这是重复的。上面的链接显示了一个解决方案,描述了这个问题的 OP 已经在使用什么。它没有解决他关于忽略不相关的十进制值的问题。

标签: c# .net asp.net-mvc formatting


【解决方案1】:
[DisplayFormat(DataFormatString = "{0:C0}")]

这应该给你 0 位小数。但自动轮回!因此,如果您得到 ,56,它将向上取整为 1

20000,00 => 20000 欧元

20000,56 => 20001 欧元

20000,49 => 20000 欧元

/edit:我从这里借用了一个想法:c# Decimal to string for currency

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

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

【讨论】:

  • 我认为 OP 只想在不相关的情况下省略小数,而不是在所有情况下。
  • 是的......好像我只是忽略了......不知何故
  • 这就是我最终的目标。在查看了小数的潜力之后,我们不太可能忽略它们。
【解决方案2】:

我认为没有明确使用货币格式的方法,但您可以使用 # 字符的自定义格式:http://msdn.microsoft.com/en-us/library/0c899ak8.aspx

这应该适用于美元:

[DisplayFormat(DataFormatString = "{0:$#.##}")]

# 字符仅在需要时代表一个数字。

【讨论】:

    【解决方案3】:
    var price = 100.0M;
    var curr = price % 1 == 0 ? price.ToString("C0") : price.ToString("C");
    

    你可以把它放在一个扩展方法中,并在你需要的地方调用它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多