Я новичок в создании веб-приложений в ASP.NET и пытаюсь отобразить валюту в кенийских шиллингах. Символ шиллинга - 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
.
Что мне нужно сделать, чтобы правильно отформатировать цену?
6 ответов
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.
Если региональные настройки вашего устройства настроены правильно, вы можете использовать:
Console.WriteLine(string.Format(CultureInfo.InvariantCulture, "{0:c}", Item.BeatPrice));
Он автоматически принимает культуру в зависимости от региональных настроек вашего компьютера.
Если формат отличается от ожидаемого, вы можете добавить настраиваемое форматирование строки:
String.Format("KES {0:N3}", Item.BeatPrice)
Надеюсь, это сработает.
KSh
System.Globalization.CultureInfo.GetCultureInfo("sw-KE").NumberFormat.CurrencySymbol
как S
Как сказал Ондрей Свейдар , есть два символа, например, доллар против доллара:
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 - нам это нравится.
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();
}
Похожие вопросы
Связанные вопросы
Новые вопросы
c#
C# (произносится как «see Sharp») — это высокоуровневый мультипарадигменный язык программирования со статической типизацией, разработанный Microsoft. Код C# обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, которое включает в себя .NET, .NET Framework, .NET MAUI и Xamarin среди прочих. Используйте этот тег для ответов на вопросы о коде, написанном на C#, или о формальной спецификации C#.