C#:圆形小数,仅在小数点为0时显示(例如:3.00 - > 3)

时间:2011-12-13 10:21:00

标签: c# decimal string-formatting

我以十进制(18,2)存储金额。但我的大多数数据实际上是整数,只有几个小数。因此,当我显示表格中每个项目的金额时,数字显示全部为3.00,4.00,5.00等。

我觉得将所有0显示为小数点有点奇怪。如果小数点为0,我希望在显示时格式化数字。

目前我正在显示这样的金额:

  <td id="amnt@(item.FoodID)" class="amountfield">
      @Html.DisplayFor(modelItem => item.FoodAmount)
  </td>

任何想法?感谢每一个帮助...谢谢......

5 个答案:

答案 0 :(得分:14)

查看您的代码我假设您正在为您的应用程序使用ASP.Net MVC。您可以使用DataAnnotation格式化数据。

您可以尝试在模型属性中使用DisplayFormat。

[DisplayFormat(DataFormatString = "{0:0.##}")] 
Decimal FoodAmount{ get; set; }

答案 1 :(得分:4)

使用"#" custom format specifier

使用自定义格式的ToString(string)
item.FoodAmount.ToString("0.##")

如果它们是非重要的零,则最多显示两位数,但省略它们。

答案 2 :(得分:2)

也许这样的事情会有所帮助......

@Html.DisplayFor(modelItem => item.FoodAmount % 1 == 0 ? item.FoodAmount.ToString("F0") : item.FoodAmount.ToString("F2"))

这应该提供如下结果:

FoodAmount | Output
--------------------
 3.00      |  3
 3.01      |  3.01
 3.5       |  3.50

我有目的地将其变为一行以适合您的Html Helper代码,但如果您愿意,可以为此创建一个辅助函数/扩展方法。

基本思想是将除数的余数除以1.如果结果为零(即它可以除以1而没有余数)则可以假设它是一个整数

替代:这也是一个选项,可能会让您更好地阅读......

item.FoodAmount.ToString("F2").TrimEnd('0', '.')

这甚至可以给你更好的结果......

FoodAmount | Output
--------------------
 3.00      |  3
 3.01      |  3.01
 3.5       |  3.5

答案 3 :(得分:0)

DataFormatString在ViewModel中运行良好

如果需要,那还可以添加一千个分隔符

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

答案 4 :(得分:0)

这对我来说是最好的

[Test]
public void DecimalFormatTests()
{
    var amt1 = 1000000m;
    var amt2 = 1000000.10m;

    var format = "0.#";

    Console.WriteLine(amt1.ToString("\\£0,0.#"));
    Console.WriteLine(amt2.ToString("\\£0,0.#"));

}

输出:

  

£10,00,000
  £10,00,000.1