Il modo migliore per convertire un valore decimale in una stringa di valuta per la visualizzazione in HTML
-
01-07-2019 - |
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 "£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("£","£")%>
</span>
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.