2013-03-29 3 views
3

Я получил для вас сегодня простую проблему, которая уже заняла у меня часть дня без каких-либо реальных достижений. Я пытаюсь отформатировать номер для отображения в виде валюты. Есть много способов сделать это, я думаю, что я сделал большую часть их.Номер формата в валюте с помощью VB.Net

Итак, вот проблема: я добавляю несколько чисел, которые могут быть положительными и отрицательными, я не знаю. Когда я форматирую в конце, используя TextBox.Text = Format(variable, "C"), я получил правильный формат для положительных чисел (например, 123 456,00 $, я живу в Канаде), и у меня есть (123 456,00 $) для отрицательных. Я бы предпочел иметь символ «-» в начале.

Я искал в Интернете, чтобы найти другие способы сделать это, например: FormatCurrency("-123 456", 2, TriState.True, TriState.False). Таким образом, я могу избавиться от круглых скобок, но «-» ПОСЛЕ номер (123 456,00 $-).

Следующий: SpecificCulture. поэтому здесь у меня есть NegativeValueHere.ToString("C", CultureInfo.CreateSpecificCulture("fr-CA")). С этим я вернусь в начале с моими скобками с (123 456,00 $). Обратите внимание, что мое приложение работает с настройкой культуры на ("fr-CA"), так как именно там я живу.

Я пробовал еще один, но не могу вспомнить, что это было. Однако «$» был перед номером, как $-123 456,00.

Примечание: Я работаю на VB.Net, и номер должен быть отформатирован, чтобы быть вставлен в readonly TextBox.

+0

вы хотите получить значение отображается как "- $ 123 456,00" вместо "$ -123 456,00", это правильно? – Csharp

+0

Nah Я хочу символ $ после номера. Но ответ от нкву соответствует моим потребностям. Спасибо, что выбрал. – Simon

ответ

3

Это, кажется, работает для меня:

Sub Main() 
    Dim value As Decimal = -123.45 
    Dim positiveValue As Decimal = 123.45 
    Dim customCurrencyInfo As CultureInfo = CultureInfo.CreateSpecificCulture("fr-CA") 

    customCurrencyInfo.NumberFormat.CurrencyNegativePattern = 8 

    Dim formatString As String = value.ToString("C", customCurrencyInfo) 
    Dim formatStringPositive As String = positiveValue.ToString("C", customCurrencyInfo) 

    Console.WriteLine(formatString) '-123,45 $ 
    Console.WriteLine(formatStringPositive) '123,45 $ 
    Console.ReadLine() 

End Sub 

Вы можете получить различные значения шаблонов для NumberFormat.CurrencyNegativePattern из this ссылки.

Извините, если я уезжаю трек

+0

Nah, который полностью работает. Я попробовал NumberFormat.CurrencyNegativePattern в столбце DataGridView, и он не работал сразу с TextBox, поэтому я больше не пошел дальше. Номер шаблона 8 - тот, который мне нужен. Спасибо. – Simon

+0

эй эй. как насчет того, хотим ли мы форматировать другие страны? @nkvu? где можно получить полный список, если скажем, что я хочу использовать малайзийский формат/любой другой формат национальной валюты? – gumuruh

+0

@gumuruh Запустите [тестовую программу] (https://msdn.microsoft.com/en-us/library/system.globalization.numberformatinfo.currencynegativepattern.aspx#Anchor_3), указанную в ссылке из ответа. – mbomb007

4

Вы можете создать свою собственную культуру с помощью пользовательского шаблона для отрицательных значений валюты. Взгляните на статью библиотеки MSDN для NumberFormatInfo.CurrencyNegativePattern. Например:

Imports System.Globalization 

Module Module1 
    Sub Main() 
     Dim simon = DirectCast(CultureInfo.GetCultureInfo("fr-CA").Clone, CultureInfo) 
     simon.NumberFormat.CurrencyNegativePattern = 1 
     Dim test = -1234.567 
     Console.WriteLine(test.ToString("C", simon)) 
     Console.ReadLine() 
    End Sub 
End Module 

Выход: - $ 1 234,57

+0

Спасибо за подсказку, @ Ханс. Я не знал об этом. – Csharp

Смежные вопросы