Melhor maneira de converter um valor decimal para uma string de moeda para exibição em HTML

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

Pergunta

Eu querendo mostrar preços para os meus produtos em minha loja online. Atualmente estou fazendo:

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

Onde getPrice () retorna um decimal. Portanto, este atualmente retorna um valor, por exemplo, "£ 12,00"

Eu acho que o HTML correto para uma produção de "£ 12,00" é "&pound;12.00", por isso, embora este está rendendo muito bem na maioria dos navegadores, alguns navegadores (Mozilla) mostram isso como US $ 12,00.

(O servidor é no Reino Unido, com localização está definido apropriadamente no web.config).

É a seguir uma melhoria, ou há uma maneira melhor?

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

Solução

O símbolo £ (U + 00A3), e as entidades HTML & # 163; e & libra; todos devem prestar o mesmo em um navegador.

Se o navegador não reconhece £, ele provavelmente não vai reconhecer as versões entidade. É na ISO 8859-1 (Latin-1), então eu ficaria surpreso se um navegador Mozilla não pode torná-lo (meu FF certamente pode).

Se você ver um sinal $, é provável que você tem duas coisas: 1. O idioma padrão do navegador é en-us 2. Asp.net está fazendo comutação local automática. A configuração web.config padrão é algo como

<globalization   culture="auto:en-us"  uiCulture="auto:en-US" />

Como você (quase certamente) quer UK-só os preços, basta especificar o local no web.config:

  <globalization   culture="us"  uiCulture="en-gb" />

(ou em nível de página:)

  <%@Page Culture="en-gb" UICulture="en-gb" ..etc... %>

Depois disso, a formatos de cadeia, tais como String ( "{0: C}", getPrice ()). E getPrice () ToString ( "C") vai utilizar a região en-GB como asp.net terá conjunto o CurrentCulture para você

(embora você pode especificar a cultura en-gb nas sobrecargas Se você é paranóico).

Outras dicas

Tente isso, ele vai usar seu aparelho de localidade para o aplicativo:

<%=String.Format("{0:C}",GetPrice())%>

Use

GetPrice().ToString("C", CultureInfo.CreateSpecificCulture("en-GB"))

Você poderia escrever uma função que iria realizar a conversão do preço a string. Desta forma, você tem um monte de controle sobre a saída.

O problema com locale é que é servidor web dependentes e não dependentes navegador.

Se você precisar declarar explicitamente a localização você pode usar o CultureInfo e passar isso para o formatador string.

apenas usar a propriedade de um valor decimal ToString ( "C2"). Defina o seu globalização no web.config -. Mantê-lo simples

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top