Il modo migliore per convertire un valore decimale in una stringa di valuta per la visualizzazione in HTML

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

Domanda

Desidero mostrare i prezzi dei miei prodotti nel mio negozio online.Attualmente sto facendo:

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

Dove GetPrice() restituisce un decimale.Quindi questo attualmente restituisce un valore, ad es."£ 12,00"

Penso che l'HTML corretto per un output di "£ 12,00" sia "&pound;12.00", quindi anche se questo funziona correttamente nella maggior parte dei browser, alcuni browser (Mozilla) lo mostrano come $ 12,00.

(Il server è nel Regno Unito, con la localizzazione impostata in modo appropriato in web.config).

Quanto riportato di seguito è un miglioramento o esiste un modo migliore?

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

Soluzione

Il simbolo £ (U+00A3) e le entità html & #163;e & libbra;dovrebbero essere tutti visualizzati allo stesso modo in un browser.

Se il browser non riconosce £, probabilmente non riconoscerà le versioni dell'entità.È in ISO 8859-1 (Latin-1), quindi sarei sorpreso se un browser Mozilla non riuscisse a renderizzarlo (il mio FF certamente può).

Se vedi il simbolo $, è probabile che il problema sia dovuto a due cose:1.La lingua predefinita del browser è EN-USA 2.Asp.net sta effettuando il cambio locale automatico.L'impostazione predefinita di web.config è qualcosa di simile

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

Dato che (quasi certamente) desideri prezzi solo per il Regno Unito, specifica semplicemente la locale in web.config:

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

(o a livello di pagina:)

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

Successivamente i formati di stringa come String.Format("{0:C}",GetPrice()) e GetPrice().ToString("C") utilizzeranno la locale en-GB poiché asp.net avrà impostato currentCulture per Voi

(anche se puoi specificare la cultura en-gb negli sovraccarichi se sei paranoico).

Altri suggerimenti

Prova questo, utilizzerà la tua impostazione locale per l'applicazione:

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

Utilizzo

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

Potresti scrivere una funzione che esegua la conversione dal prezzo alla stringa.In questo modo hai molto controllo sull'output.

Il problema con la localizzazione è che dipende dal server web e non dal browser web.

Se è necessario dichiarare esplicitamente la localizzazione, è possibile utilizzare CultureInfo e passarla al formattatore di stringhe.

basta usare la proprietà ToString("C2") di un valore decimale.Imposta la tua globalizzazione nel web.config: mantienilo semplice.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top