2013-05-28 4 views
2

У меня есть поле, которое должно состоять из валюты, которая, согласно моему региону, является Индонезией, которая является IDR или Rp. и я построить его с string.format как это:Изменить формат валюты

Dim price As Single = Single.Parse(Convert.ToSingle(lblAmountGV.Text)) 
lblAmount.Text = String.Format("{0,C}", price) 

, но это дает мне знак доллара. и я изменить код:

lblAmount.Text = String.Format("Rp{0}", price) 

, но я не получил dot (.) и Comma(,). так что я изменить код еще раз с помощью FormatCurrency:

lblAmount.Text = FormatCurrency(lblAmountGV.Text, , , TriState.True, TriState.True) 

, но все-таки дать мне знак доллара, позже я нашел, как изменить CultureInfo:

импортом:

Imports System.Globalization 

и по моему коду:

Dim culture = CultureInfo.GetCultureInfo(" id-ID") 
    Dim format = DirectCast(culture.NumberFormat.Clone(), NumberFormatInfo) 
    format.CurrencySymbol = "Rp." 
    var number = Decimal.Parse(lblAmountGV.Text, NumberStyles.Currency, format); 

lblAmount.Text = number 

но оно все еще дает мне $ Значок, как сменить команду $ programatically?

+1

Когда имеешь дело с деньгами, не используйте тип «Single», даже если он кажется достаточно большим. Используйте десятичный тип. Всегда. –

+0

@JoelCoehoorn Спасибо за исправление. – Sabilv

ответ

3

я вижу пару проблем с тем, что вы вывесили -

эта линия неправильна

String.Format("{0,C}", price) 

Вы должны использовать двоеточие, чтобы добавить дополнительные параметры форматирования. Если вы хотите форматировать валюту с десятичными знаками, вам также нужно указать количество десятичных цифр. Это должно быть что-то вроде этого

String.Format("{0:C2}", price) 

И эта линия имеет дополнительное пространство, которое приводит к сбою с CultureNotFoundException

CultureInfo.GetCultureInfo(" id-ID") 

Должно быть

CultureInfo.GetCultureInfo("id-ID") 

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

Dim culture As CultureInfo = CultureInfo.GetCultureInfo("id-ID") 
Dim price As Double = 10.05 

Dim result As String = String.Format(culture, "{0:C2}", price) 

Вы можете увидеть его в действии here

Если вы знакомы с LINQPad, вы можете вставить следующий текст в LINQPad и увидеть правильное форматирование без знака доллара -

String.Format(CultureInfo.GetCultureInfo("id-ID"), "{0:C2}", 10.05).Dump() 
+0

эй спасибо !! он работает для меня тоже :) – Sabilv

+0

спасибо за исправление :) – Sabilv

+0

@SabilValdano: Teruskan perjuanganmu ..... – matzone

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