2015-12-25 2 views
0

Я пытаюсь отформатировать нулевое значение валюты как пустую строку, так что, когда значение валюты равно 0.00, тогда отображается пустая строка, а не . Этот код является частью приложения ASP.Net, которое отображает значение валюты для конечного пользователя.Отформатируйте нулевое значение валюты с помощью {0: C} в VB.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 

UPDATE

Я в конечном итоге, используя следующий код, который работает отлично. If лучше, чем IIf, потому что он выполняет короткое замыкание, что означает, что IIf будет оценивать все выражения, является ли условие истинным или ложным, но If будет оценивать первое выражение, только если условие истинно и оценивает второе выражение, только если условие ложно.

Dim d As Decimal 
Decimal.TryParse(currencyValue, d) 
charValue = If(d = 0D, Nothing, String.Format("{0:C}", d)) 

ответ

1

Я не думаю, что существует способ использования форматирования для отображения пустой строки. Но вы можете написать это нравится:

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 Server mind SQL Server Data Type Mappings

1

Я не думаю, что вы можете при использовании C или другие подобные стандартные форматы, так как они уже определяя культуру конкретного формата, который будет включать в себя формат нуля.

Но если вы укажете свой собственный формат, вы можете указать три разных формата, разделенных ; s, по одному для положительных чисел, отрицательных чисел и нуля соответственно.

Например (давая пустую строку формата ноль, в результате чего пустые нули):

charValue = String.Format("{0:#,##0.00;-#,##0.00;""""}", CDec(currencyValue)) 

И от того, что я могу видеть, опуская формат негатива дает значение по умолчанию, которое соответствует положительным, в то время как опуская формат нуль дает пустым, которая является то, что вы ищете, так что это должно быть достаточно, а также: (. с помощью какого формата пользовательских вы хотите)

charValue = String.Format("{0:#,##0.00;;}", CDec(currencyValue)) 

UPDATE: вы можете получить текущий символ валюты и вручную поместить его в свой собственный формат. IE:

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, дает, но с пустыми нулями.

+0

Для ненулевых значений символ валюты конкретной культуры не будет включен в форматированное значение, если я использую ваш код. Мне нужен символ валюты для ненулевых значений. – Sunil

+1

@Sunil Вы можете использовать 'Threading.Thread.CurrentThread.CurrentCulture.NumberFormat.CurrencySymbol', чтобы получить символ валюты. –