字符串格式设置为货币 C#
本文关键字:货币 设置 格式 字符串 | 更新日期: 2023-09-27 17:56:19
我是用 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
。
我需要做什么才能正确格式化价格?
如果格式与预期不符,您可以添加自定义字符串格式:
String.Format("KES {0:N3}", Item.BeatPrice)
希望这有效。
最好不要对 CurrencySymbol 进行硬编码,所以你应该使用
var regionInfo = new RegionInfo("sw-KE");
var currencySymbol = regionInfo.ISOCurrencySymbol;
以获得适合您的文化的正确货币符号。
//编辑:或者你可以试试这个功能:
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 的格式化货币字符串。
如果计算机的区域设置正确,则可以使用:
Console.WriteLine(string.Format(CultureInfo.InvariantCulture, "{0:c}", Item.BeatPrice));
它将根据计算机的区域设置自动获取文化。
就像Ondrej Svejdar所说,有两个符号,如美元与美元:
var region = new System.Globalization.RegionInfo("sw-KE");
Console.WriteLine(region.CurrencySymbol); // "S"
Console.WriteLine(region.ISOCurrencySymbol); // "KES"
注意:当我在IDEone(使用Mono编译)上运行它时,结果出乎意料("KES"和"肯尼亚先令")。
使用 String.Format 时,"c"或"C"会为您提供指定区域性的货币符号。 您正在尝试显示肯尼亚先令的货币 ISO 代码。下面的代码将准确显示您想要的内容。
String.Format("{0} {1}", (new RegionInfo("sw-KE")).ISOCurrencySymbol, Item.BeatPrice)
如果您不更改应用程序上的区域性,则可以轻松执行此操作。
String.Format("{0} {1}", "KES", Item.BeatPrice)
是将字符串格式化为货币格式{0:C}
并将当前线程 UICulture 或区域性更改为 KES,ASP.NET 足够智能,可以显示适合您当前文化的页面。
注意:您可以通过更改浏览器的区域性来更改区域性(您可以出于开发目的执行此操作),但最佳做法以编程方式更改区域性,例如,在这里我更改了基于用户 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();
}