我有一个应该包含货币的字段,根据我所在的地区是印度尼西亚,即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
但它仍然给我一个$
标志,如何以编程方式更改$
?
答案 0 :(得分: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()