La mejor manera de convertir un valor decimal a una moneda de cadena para la presentación en HTML
-
01-07-2019 - |
Pregunta
Yo con ganas de demostrar los precios de mis productos en mi tienda online.Actualmente estoy haciendo:
<span class="ourprice">
<%=GetPrice().ToString("C")%>
</span>
Donde GetPrice() devuelve un número decimal.Así que esta actualmente devuelve un valor por ejemplo,"£12.00"
Creo que el HTML correcto para una salida de "£12.00" es "£12.00
", así que, aunque esto es representar bien en la mayoría de los navegadores, algunos navegadores (Mozilla) mostrar esta como $12.00.
(El servidor se encuentra en el reino unido, con la localización está configurado correctamente en la web.config).
Es la continuación de una mejora, o hay una mejor manera?
<span class="ourprice">
<%=GetPrice().ToString("C").Replace("£","£")%>
</span>
Solución
El £ símbolo (U+00A3), y las entidades html & #163;y & pound;todos debemos hacer que el mismo en un navegador.
Si el navegador no reconoce £, probablemente no reconocer la entidad versiones.Es en ISO 8859-1 (Latin-1), por lo que me sorprendería si un navegador de Mozilla no puede hacerla (mi FF, que sin duda puede).
Si usted ve un signo$, lo más probable es que usted tiene dos cosas:1.El navegador por defecto el idioma es en-us 2.Asp.net está haciendo automática de la configuración regional de conmutación.La web predeterminado.config configuración es algo como
<globalization culture="auto:en-us" uiCulture="auto:en-US" />
Como (casi seguro) quiere que el reino unido sólo los precios, basta con especificar la configuración regional en la web.config:
<globalization culture="us" uiCulture="en-gb" />
(o en la página de nivel:)
<%@Page Culture="en-gb" UICulture="en-gb" ..etc... %>
A partir de entonces la cadena de formatos, tales como Cadena.Format("{0:C}",GetPrice()) y GetPrice().ToString("C") se utiliza la en-GB regional como asp.net se ha establecido la currentCulture para usted
(aunque se puede especificar la en-gb cultura en el sobrecargas si usted es paranoico).
Otros consejos
Prueba esto, que va a utilizar la configuración regional establecida para la aplicación:
<%=String.Format("{0:C}",GetPrice())%>
Uso
GetPrice().ToString("C", CultureInfo.CreateSpecificCulture("en-GB"))
Podría escribir una función que iba a realizar la conversión de precios a la cadena.De esta manera usted tiene un montón de control sobre la salida.
El problema con la configuración regional es que la web dependientes del servidor y no del navegador web dependiente.
Si usted necesita explícitamente al estado la localización puede utilizar la clase CultureInfo y que pase a la cadena de formateador.
sólo utilice el método ToString("C2") de propiedad de un valor decimal.Establecer su globalización en la web.config - mantenerlo simple.