在 VB.Net 中使用 {0:C} 格式化零货币值
Format zero currency value with {0:C} in VB.Net
我正在尝试将零货币值格式化为空字符串,以便当货币值为 0.00
时显示空字符串而不是 [=14=].00
。
此代码是 ASP.Net 应用程序的一部分,该应用程序将向最终用户显示货币价值。
我使用了以下代码来实现这个目标。
问题 : 是否可以通过仅使用 {0:C}
格式字符串或此格式字符串的另一个版本而不是使用 if then else
编码来实现此目的这个?如果我使用 ###,###,###.##
作为数据格式字符串,则零货币值会显示一个空字符串,而且我会去掉 if then else
编码,但对于非零值,则不会显示货币符号。
If Double.Parse(Decimal.Parse(CDec(currencyValue))) = 0 Then
charValue = Nothing
Else
charValue = String.Format("{0:C}", CDec(currencyValue))
End If
更新
我最终使用了以下代码,它运行良好。 If
优于 IIf
因为它会短路,这意味着 IIf
将评估所有表达式,无论条件为真还是假,但 If
将评估第一个表达式仅当条件为真时才计算第二个表达式,仅当条件为假时才计算第二个表达式。
Dim d As Decimal
Decimal.TryParse(currencyValue, d)
charValue = If(d = 0D, Nothing, String.Format("{0:C}", d))
我不认为你可以使用 C
或其他类似的标准格式,因为它们已经定义了一种特定于文化的格式,其中将包括零格式。
但如果您指定自己的自定义格式,则可以指定三种不同的格式,以 ;
分隔,正数、负数和零各一种。
例如(给零格式一个空字符串,导致空白零):
charValue = String.Format("{0:#,##0.00;-#,##0.00;""""}", CDec(currencyValue))
据我所知,省略负数的格式会给出与正数匹配的默认值,而省略零的格式会给出空白,这正是您要查找的内容,所以这也应该足够了:
charValue = String.Format("{0:#,##0.00;;}", CDec(currencyValue))
(使用您想要的任何自定义格式。)
更新:您可以获取当前货币符号并手动将其放入您的自定义格式。即:
Dim symbol = CultureInfo.CurrentCulture.NumberFormat.CurrencySymbol
charValue = String.Format("{0}{1:#,##0.00;;}", symbol, CDec(currencyValue))
虽然听起来,我认为我实际上会建议基本上按照您开始的方式进行操作,也许使用扩展方法。
<Extension>
Public Function ToCurrencyString(pValue As Decimal) As String
Return IIf(pValue = 0, "", pValue.ToString("C"))
End Function
Dim someValue As Decimal = 1.23
Console.WriteLine(someValue.ToCurrencyString())
这正是您要查找的内容。与 C
给出的格式完全相同,但带有空白零。
我认为没有办法使用格式化来显示空字符串。
但是你可以这样写:
charValue = If( currencyValue = 0D, "", currencyValue.ToString("C") )
使用 If Operator (Visual Basic).
还有这个我不会做的:
If Double.Parse(Decimal.Parse(CDec(currencyValue))) = 0 Then
如果currencyValue
是Decimal
:
If (currencyValue = 0D) Then
如果currencyValue
是Double
:
If (currencyValue = 0R) Then
此外,如果您正在使用数据库并且这是 Sql 服务器思维 SQL Server Data Type Mappings
我正在尝试将零货币值格式化为空字符串,以便当货币值为 0.00
时显示空字符串而不是 [=14=].00
。
此代码是 ASP.Net 应用程序的一部分,该应用程序将向最终用户显示货币价值。
我使用了以下代码来实现这个目标。
问题 : 是否可以通过仅使用 {0:C}
格式字符串或此格式字符串的另一个版本而不是使用 if then else
编码来实现此目的这个?如果我使用 ###,###,###.##
作为数据格式字符串,则零货币值会显示一个空字符串,而且我会去掉 if then else
编码,但对于非零值,则不会显示货币符号。
If Double.Parse(Decimal.Parse(CDec(currencyValue))) = 0 Then
charValue = Nothing
Else
charValue = String.Format("{0:C}", CDec(currencyValue))
End If
更新
我最终使用了以下代码,它运行良好。 If
优于 IIf
因为它会短路,这意味着 IIf
将评估所有表达式,无论条件为真还是假,但 If
将评估第一个表达式仅当条件为真时才计算第二个表达式,仅当条件为假时才计算第二个表达式。
Dim d As Decimal
Decimal.TryParse(currencyValue, d)
charValue = If(d = 0D, Nothing, String.Format("{0:C}", d))
我不认为你可以使用 C
或其他类似的标准格式,因为它们已经定义了一种特定于文化的格式,其中将包括零格式。
但如果您指定自己的自定义格式,则可以指定三种不同的格式,以 ;
分隔,正数、负数和零各一种。
例如(给零格式一个空字符串,导致空白零):
charValue = String.Format("{0:#,##0.00;-#,##0.00;""""}", CDec(currencyValue))
据我所知,省略负数的格式会给出与正数匹配的默认值,而省略零的格式会给出空白,这正是您要查找的内容,所以这也应该足够了:
charValue = String.Format("{0:#,##0.00;;}", CDec(currencyValue))
(使用您想要的任何自定义格式。)
更新:您可以获取当前货币符号并手动将其放入您的自定义格式。即:
Dim symbol = CultureInfo.CurrentCulture.NumberFormat.CurrencySymbol
charValue = String.Format("{0}{1:#,##0.00;;}", symbol, CDec(currencyValue))
虽然听起来,我认为我实际上会建议基本上按照您开始的方式进行操作,也许使用扩展方法。
<Extension>
Public Function ToCurrencyString(pValue As Decimal) As String
Return IIf(pValue = 0, "", pValue.ToString("C"))
End Function
Dim someValue As Decimal = 1.23
Console.WriteLine(someValue.ToCurrencyString())
这正是您要查找的内容。与 C
给出的格式完全相同,但带有空白零。
我认为没有办法使用格式化来显示空字符串。 但是你可以这样写:
charValue = If( currencyValue = 0D, "", currencyValue.ToString("C") )
使用 If Operator (Visual Basic).
还有这个我不会做的:
If Double.Parse(Decimal.Parse(CDec(currencyValue))) = 0 Then
如果currencyValue
是Decimal
:
If (currencyValue = 0D) Then
如果currencyValue
是Double
:
If (currencyValue = 0R) Then
此外,如果您正在使用数据库并且这是 Sql 服务器思维 SQL Server Data Type Mappings