C# 如何转换以下十进制数?到字符串(“F2”)

C# 如何转换以下十进制数?到字符串(“F2”),c#,asp.net-mvc,C#,Asp.net Mvc,我有十进制数?数量 在我的模型中,我的值是@item.Sales,我试图将其写为@item.Sales.ToString(“F2”) 我收到消息错误1方法“ToString”的无重载包含1个参数 如何实现上述如果是可为空的十进制数,则需要首先获取不可为空的值: @item.Sales.Value.ToString("F2") 当然,如果@item.Sales实际上是空值,则会引发异常,因此您需要首先检查该值。您可以创建一个扩展方法,以便主代码更简单 if( item.Sales.HasValu

我有十进制数?数量

在我的模型中,我的值是@item.Sales,我试图将其写为@item.Sales.ToString(“F2”)

我收到消息错误1方法“ToString”的无重载包含1个参数


如何实现上述

如果是可为空的十进制数,则需要首先获取不可为空的值:

@item.Sales.Value.ToString("F2")

当然,如果
@item.Sales
实际上是空值,则会引发异常,因此您需要首先检查该值。

您可以创建一个扩展方法,以便主代码更简单

if( item.Sales.HasValue )
{
    item.Sales.Value.ToString(....)
}
else
{
 //exception handling
}
  public static class DecimalExtensions
  {
    public static string ToString(this decimal? data, string formatString, string nullResult = "0.00")
    {
      return data.HasValue ? data.Value.ToString(formatString) : nullResult;
    }
  }
你可以这样称呼它:

  decimal? value = 2.1234m;
  Console.WriteLine(value.ToString("F2"));

使用一元数?运算符仅在存在对象时运行.ToString()

@item.Sales?.ToString("F2")
还是用双人床??因此,运算符使其不可为空:

@((item.Sales??0).ToString("F2"))

这比
@item.Sales.Value.Tostring(“F2”)
要好,因为如果在使用
.Tostring(“F2”)
之前不检查空值,代码将在运行时中断。

是的,只需添加“if(@item.Sales.HasValue){…进行转换…}”我的视图中没有HasValue方法。错误消息为错误1“decimal”不包含“HasValue”的定义,并且找不到接受“decimal”类型的第一个参数的扩展方法“HasValue”(是否缺少using指令或程序集引用?)@ USER 181180:在这种情况下,您的值不是第一类的“代码>十进制?< /代码> -为什么您在标题中包含问号?但是调用
ToString(“F2”)
应该没问题…@jon:value是decimal类型的?。如果代码@item.Sales.ToString(“F2”)的类型是decimal而不是decimal,那么代码@item.Sales.ToString(“F2”)工作得很好@user281180:如果值的类型确实是
decimal?
,那么您应该能够使用
HasValue
。编译器错误强烈表明类型只是
decimal
,而不是
decimal?
。无论哪一个,无论是
@item.Sales.HasValue
还是
@item.Sales.ToString(“F2”)
,都应该有效。您没有尝试
@item.Sales.Value.HasValue
是吗?或者如果希望将null值留空<代码>@item.Sales?.ToString(“F2”)谢谢@JeremyLakeman,我会用你的建议更新我的答案,因为它使用更少的代码来实现类似的效果。