我以十进制(18,2)存储金额。但我的大多数数据实际上是整数,只有几个小数。因此,当我显示表格中每个项目的金额时,数字显示全部为3.00,4.00,5.00等。
我觉得将所有0显示为小数点有点奇怪。如果小数点为0,我希望在显示时格式化数字。
目前我正在显示这样的金额:
<td id="amnt@(item.FoodID)" class="amountfield">
@Html.DisplayFor(modelItem => item.FoodAmount)
</td>
任何想法?感谢每一个帮助...谢谢......
答案 0 :(得分:14)
查看您的代码我假设您正在为您的应用程序使用ASP.Net MVC。您可以使用DataAnnotation格式化数据。
您可以尝试在模型属性中使用DisplayFormat。
[DisplayFormat(DataFormatString = "{0:0.##}")]
Decimal FoodAmount{ get; set; }
答案 1 :(得分:4)
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