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