字符串格式设置为货币 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

我需要做什么才能正确格式化价格?

字符串格式设置为货币 C#

如果格式与预期不符,您可以添加自定义字符串格式:

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();
}