Лучший способ преобразовать десятичное значение в строку валюты для отображения в HTML - PullRequest
2 голосов
/ 18 сентября 2008

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

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

Где GetPrice () возвращает десятичное число. Так что это в настоящее время возвращает значение, например "£ 12,00"

Я думаю, правильный HTML для вывода «£ 12,00» - это «&pound;12.00», поэтому, хотя в большинстве браузеров это прекрасно воспроизводится, некоторые браузеры (Mozilla) показывают это как $ 12,00.

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

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

<span class="ourprice">
     <%=GetPrice().ToString("C").Replace("£","&pound;")%>
</span>

Ответы [ 6 ]

3 голосов
/ 18 сентября 2008

Использование

GetPrice().ToString("C", CultureInfo.CreateSpecificCulture("en-GB"))
3 голосов
/ 18 сентября 2008

Попробуйте, это будет использовать ваш языковой стандарт для приложения:

<%=String.Format("{0:C}",GetPrice())%>
2 голосов
/ 18 сентября 2008

Символ £ (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 текущая культура для вас

(хотя вы можете указать культуру en-gb в перегрузках, если вы параноик).

1 голос
/ 18 сентября 2008

Вы можете написать функцию, которая будет выполнять преобразование из цены в строку. Таким образом, вы можете контролировать выход.

Проблема с локалью в том, что она зависит от веб-сервера, а не от веб-браузера.

0 голосов
/ 18 сентября 2008

просто используйте свойство ToString ("C2") десятичного значения. Настройте свою глобализацию в файле web.config - будьте проще.

0 голосов
/ 18 сентября 2008

Если вам необходимо подробно указать локализацию, вы можете использовать CultureInfo и передать ее в форматировщик строки.

...