我是在ASP.NET中构建Web应用程序的新手,我正试图在肯尼亚先令中显示货币。先令的符号是KES。
我有这个:
<span>
<b>Price: </b><%#:String.Format(new System.Globalization.CultureInfo("sw-KE"), "{0:c}", Item.BeatPrice)%>
</span>
文化名称来自http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo%28v=vs.80%29.aspx。
但是,价格显示为S3,000
而不是KES 3,000
。
我需要做什么才能正确格式化价格?
答案 0 :(得分:3)
如果格式不符合您的预期,您可以添加自定义字符串格式:
String.Format("KES {0:N3}", Item.BeatPrice)
希望这有效。
答案 1 :(得分:3)
最好不要对CurrencySymbol进行硬编码,因此您应该使用
var regionInfo = new RegionInfo("sw-KE");
var currencySymbol = regionInfo.ISOCurrencySymbol;
为您的文化获取正确的CurrencySymbol。
<强> //编辑:强> 或者您可以尝试此功能:
public static string FormatCurrency(decimal value)
{
CultureInfo cultureInfo = Thread.CurrentThread.CurrentUICulture;
RegionInfo regionInfo = new RegionInfo(cultureInfo.LCID);
string formattedCurrency = String.Format("{0} {1:C}", regionInfo.ISOCurrencySymbol, value);
return formattedCurrency.Replace(cultureInfo.NumberFormat.CurrencySymbol, String.Empty).Trim();
}
它为您提供基于当前UICulture的格式化货币字符串。
答案 2 :(得分:1)
如果您的机器的区域设置已正确设置,则可以使用:
Console.WriteLine(string.Format(CultureInfo.InvariantCulture, "{0:c}", Item.BeatPrice));
它会根据您机器的区域设置自动获取文化。
答案 3 :(得分:1)
像 Ondrej Svejdar 所说,有两个符号,如$ vs. USD:
var region = new System.Globalization.RegionInfo("sw-KE");
Console.WriteLine(region.CurrencySymbol); // "S"
Console.WriteLine(region.ISOCurrencySymbol); // "KES"
注意:当我ran this on IDEone(使用Mono编译)时,结果出乎意料(&#34; KES&#34;&#34; Kenyan Shilling&#34;)。
答案 4 :(得分:1)
使用String.Format“c”或“C”时,为您提供指定文化的货币符号。您正在尝试显示肯尼亚先令的货币ISO代码。下面的代码将准确显示您想要的内容。
String.Format("{0} {1}", (new RegionInfo("sw-KE")).ISOCurrencySymbol, Item.BeatPrice)
如果您没有简单地在应用程序上更改文化,请执行此操作。
String.Format("{0} {1}", "KES", Item.BeatPrice)
答案 5 :(得分:0)
最佳做法是将字符串格式化为货币格式{0:C}
并将当前线程UICulture或Culture更改为KES,并且ASP.NET足够智能以显示符合您的currunt文档的页面。
注意: 您可以通过改变浏览器的文化来改变文化(您可以为了开发目的而这样做)但是最佳实践以编程方式改变文化,例如在这里我改变了用户Cookie的文化基础和mu默认文化是en-us像这样。
protected override void InitializeCulture()
{
HttpCookie cultureCookie = Request.Cookies["culture"];
if (cultureCookie == null)
{
cultureCookie = new HttpCookie("culture", "en-US");
Response.Cookies.Add(cultureCookie);
}
Thread.CurrentThread.CurrentCulture = new CultureInfo(cultureCookie.Value);
Thread.CurrentThread.CurrentUICulture = new CultureInfo(cultureCookie.Value);
base.InitializeCulture();
}