Лучший способ преобразовать десятичное значение в строку валюты для отображения в HTML
-
01-07-2019 - |
Вопрос
Я хочу показывать цены на свою продукцию в моем интернет-магазине.В настоящее время я делаю:
<span class="ourprice">
<%=GetPrice().ToString("C")%>
</span>
Где GetPrice() возвращает десятичное число.Итак, в настоящее время это возвращает значение, например.«12 фунтов стерлингов»
Я думаю, что правильный HTML-код для вывода «12 фунтов стерлингов» — это «£12.00
", поэтому, хотя в большинстве браузеров это отображается нормально, в некоторых браузерах (Mozilla) это значение отображается как 12,00 долларов США.
(Сервер находится в Великобритании, локализация настроена соответствующим образом в web.config).
Является ли приведенное ниже улучшением или есть лучший способ?
<span class="ourprice">
<%=GetPrice().ToString("C").Replace("£","£")%>
</span>
Решение
Символ £ (U+00A3) и объекты html & #163;и & фунт;все должны отображаться одинаково в браузере.
Если браузер не распознает £, он, вероятно, не распознает версии объекта.Он находится в ISO 8859-1 (Latin-1), поэтому я был бы удивлен, если браузер Mozilla не сможет его отобразить (мой FF, конечно, может).
Если вы видите знак $, скорее всего, у вас есть две вещи:1.Язык браузера по умолчанию en-us 2.Asp.net выполняет автоматическое переключение локали.Настройка web.config по умолчанию выглядит примерно так:
<globalization culture="auto:en-us" uiCulture="auto:en-US" />
Поскольку вам (почти наверняка) нужны цены только для Великобритании, просто укажите локаль в web.config:
<globalization culture="us" uiCulture="en-gb" />
(или на уровне страницы :)
<%@Page Culture="en-gb" UICulture="en-gb" ..etc... %>
После этого строковые форматы, такие как String.Format("{0:C}",GetPrice()) и GetPrice().ToString("C"), будут использовать локаль en-GB, поскольку asp.net установит currentCulture для ты
(хотя вы можете указать культуру en-gb в перегрузках, если вы параноик).
Другие советы
Попробуйте это, он будет использовать ваш языковой стандарт для приложения:
<%=String.Format("{0:C}",GetPrice())%>
Использовать
GetPrice().ToString("C", CultureInfo.CreateSpecificCulture("en-GB"))
Вы можете написать функцию, которая будет выполнять преобразование цены в строку.Таким образом, у вас есть большой контроль над выводом.
Проблема с локалью заключается в том, что она зависит от веб-сервера, а не от веб-браузера.
Если вам нужно явно указать локализацию, вы можете использовать CultureInfo и передать ее форматировщику строк.
просто используйте свойство ToString("C2") десятичного значения.Установите глобализацию в файле web.config — будьте проще.