Лучший способ преобразовать десятичное значение в строку валюты для отображения в HTML

StackOverflow https://stackoverflow.com/questions/88522

Вопрос

Я хочу показывать цены на свою продукцию в моем интернет-магазине.В настоящее время я делаю:

<span class="ourprice">
     <%=GetPrice().ToString("C")%>
</span>

Где GetPrice() возвращает десятичное число.Итак, в настоящее время это возвращает значение, например.«12 фунтов стерлингов»

Я думаю, что правильный HTML-код для вывода «12 фунтов стерлингов» — это «&pound;12.00", поэтому, хотя в большинстве браузеров это отображается нормально, в некоторых браузерах (Mozilla) это значение отображается как 12,00 долларов США.

(Сервер находится в Великобритании, локализация настроена соответствующим образом в web.config).

Является ли приведенное ниже улучшением или есть лучший способ?

<span class="ourprice">
     <%=GetPrice().ToString("C").Replace("£","&pound;")%>
</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 — будьте проще.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top