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

本文关键字:例如 显示 小数 舍入 小数点 | 更新日期: 2023-09-27 18:17:46

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

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

目前我显示的金额是这样的:

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

知道吗??感谢每一个帮助...谢谢。。。

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

查看您的代码,我假设您正在为您的应用程序使用 ASP.Net MVC。您可以使用"数据注释"来设置数据的格式。

您可以尝试在模型属性中使用显示格式。

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

使用"#"自定义格式说明符将ToString(string)与自定义格式一起使用

item.FoodAmount.ToString("0.##")

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

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

@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 帮助程序代码,但如果您愿意,您可以为此创建一个帮助程序函数/扩展方法。

基本思想是将除以 1 的余数得到。如果结果为零(即它可以除以 1 而没有余数(,那么它可以被假定为整数

替代方案:这也是一种选择,可能会更好地阅读......

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

这甚至可能会给你带来更好的结果...

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

DataFormatString 在 ViewModel 中运行良好

如果需要,这还将添加一千个分隔符

[DisplayFormat(DataFormatString = "{0:#,##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