2013-05-28 106 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 

但它仍然給我一個$登錄,如何以編程方式更改$

+1

當與金錢打交道,不使用「單一」類型,即使它看起來足夠大。使用十進制類型。總是。 –

+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