ho questa lineaString moneta formato
@String.Format("{0:C}", @price)
a mio avviso rasoio. Voglio che mostri un segno di dollaro di fronte al prezzo, ma invece mostri un cancelletto. Come ottengo questo?
ho questa lineaString moneta formato
@String.Format("{0:C}", @price)
a mio avviso rasoio. Voglio che mostri un segno di dollaro di fronte al prezzo, ma invece mostri un cancelletto. Come ottengo questo?
ho il forte sospetto che il problema è semplicemente che la cultura corrente della gestione della richiesta di filo non è impostata in modo appropriato.
È possibile impostarlo per l'intera richiesta oppure specificare la cultura durante la formattazione. Ad ogni modo, suggerirei non usare string.Format
con un formato composito a meno che non si abbia davvero più di una cosa da formattare (o un messaggio più ampio). Invece, vorrei usare:
@price.ToString("C", culture)
Semplicemente lo rende un po 'più semplice.
MODIFICA: Dato il tuo commento, sembra che potresti voler utilizzare una coltura del Regno Unito indipendentemente dallo della cultura dell'utente. Quindi, di nuovo, o impostare la cultura del Regno Unito come la cultura filo per tutta la richiesta, o, eventualmente, presentare la propria classe helper con un "costante":
public static class Cultures
{
public static readonly CultureInfo UnitedKingdom =
CultureInfo.GetCultureInfo("en-GB");
}
Poi:
@price.ToString("C", Cultures.UnitedKingdom)
Nella mia esperienza, avere un set "named" di culture come questo rende il codice molto più semplice da leggere, e non è necessario ottenere la stringa giusta in più punti.
Hardcoding a CultureInfo per ottenere un determinato simbolo di valuta è buttare fuori il bambino con l'acqua del bagno. Inoltre, non vi è alcuna garanzia che un certo CultureInfo manterrà il simbolo di valuta che si aspetta che abbia. Ma il problema principale è che si introduce un bug di globalizzazione perdendo la corretta formattazione della cultura (simbolo decimale, posizionamento del simbolo di valuta). Si prega di vedere la mia risposta per una spiegazione. – Clafou
@Clafou: a volte butta fuori il bambino con l'acqua sporca; a volte è la cosa giusta da fare. Sono d'accordo è un argomento complesso però. È un dolore (IMO) che ci sia un "formato valuta" che include la valuta, piuttosto che un tipo "Denaro" con importo e valuta, che potrebbe quindi essere formattato in base alla cultura locale. –
Sono d'accordo, è a dir poco imbarazzante (penso che la formattazione della valuta sia l'argomento della globalizzazione che confonde la maggior parte delle persone). Fortunatamente ci sono librerie di terze parti come [NMoneys] (http://code.google.com/p/nmoneys/) che funzionano bene. – Clafou
è necessario fornire un IFormatProvider:
@String.Format(new CultureInfo("en-US"), "{0:C}", @price)
il tipo o lo spazio dei nomi 'cultureInfo' non può essere trovato ... – niico
Come altri hanno già detto, è possibile ottenere ciò tramite un IFormatProvider. Ma tieni presente che la formattazione della valuta va ben oltre il simbolo della valuta. Ad esempio, un prezzo correttamente formattato negli Stati Uniti potrebbe essere "$ 12,50", ma in Francia questo sarebbe scritto "12,50 $" (il punto decimale è diverso così come la posizione del simbolo di valuta). Non vuoi perdere questa formattazione adatta alla cultura solo per cambiare il simbolo della valuta. E la buona notizia è che non c'è bisogno di, come dimostra questo codice:
var cultureInfo = Thread.CurrentThread.CurrentCulture; // You can also hardcode the culture, e.g. var cultureInfo = new CultureInfo("fr-FR"), but then you lose culture-specific formatting such as decimal point (. or ,) or the position of the currency symbol (before or after)
var numberFormatInfo = (NumberFormatInfo)cultureInfo.NumberFormat.Clone();
numberFormatInfo.CurrencySymbol = "€"; // Replace with "$" or "£" or whatever you need
var price = 12.3m;
var formattedPrice = price.ToString("C", numberFormatInfo); // Output: "€ 12.30" if the CurrentCulture is "en-US", "12,30 €" if the CurrentCulture is "fr-FR".
Nel 99% dei casi, questa è l'unica risposta corretta. Jon Skeet potrebbe avere più fan, e ha ragione nel dire che il modello 'CultureInfo' /' NumberFormatInfo' non è ottimale (per non dire altro), ma in questo caso la sua risposta semplicemente non è la più appropriata. A proposito, inizialmente ho creato un nuovo oggetto 'CultureInfo' basato sulla cultura corrente solo per cambiare il simbolo della valuta (quindi puoi farlo anche tu), ma la clonazione solo dell'oggetto' NumberFormatInfo' è decisamente migliore. – tne
Per rasoio è possibile utilizzare: la cultura, il valore
@String.Format(new CultureInfo("sv-SE"), @Model.value)
Personalmente sono contro l'uso di codice specifico della cultura , vi suggerisco di fare:
@String.Format(CultureInfo.CurrentCulture, "{0:C}", @price)
e nel tuo web.config fare:
<system.web>
<globalization culture="en-GB" uiCulture="en-US" />
</system.web>
Ulteriori informazioni: https://msdn.microsoft.com/en-us/library/syy068tk(v=vs.90).aspx
decimal value = 0.00M;
value = Convert.ToDecimal(12345.12345);
Console.WriteLine(".ToString(\"C\") Formates With Currency $ Sign");
Console.WriteLine(value.ToString("C"));
//OutPut : $12345.12
Console.WriteLine(value.ToString("C1"));
//OutPut : $12345.1
Console.WriteLine(value.ToString("C2"));
//OutPut : $12345.12
Console.WriteLine(value.ToString("C3"));
//OutPut : $12345.123
Console.WriteLine(value.ToString("C4"));
//OutPut : $12345.1234
Console.WriteLine(value.ToString("C5"));
//OutPut : $12345.12345
Console.WriteLine(value.ToString("C6"));
//OutPut : $12345.123450
Console.WriteLine();
Console.WriteLine(".ToString(\"F\") Formates With out Currency Sign");
Console.WriteLine(value.ToString("F"));
//OutPut : 12345.12
Console.WriteLine(value.ToString("F1"));
//OutPut : 12345.1
Console.WriteLine(value.ToString("F2"));
//OutPut : 12345.12
Console.WriteLine(value.ToString("F3"));
//OutPut : 12345.123
Console.WriteLine(value.ToString("F4"));
//OutPut : 12345.1234
Console.WriteLine(value.ToString("F5"));
//OutPut : 12345.12345
Console.WriteLine(value.ToString("F6"));
//OutPut : 12345.123450
Console.Read();
Suggerirei di ridurre la risposta alla domanda posta. Mentre questo potrebbe essere giusto, solo il 10% circa della risposta deve fare qualcosa con la domanda. Inoltre, penso anche che il poster usi già il formato giusto ma abbia alcuni problemi locali. Quindi questa risposta non è molto utile –
Quando si dice "cancelletto" che cosa vuoi dire? # o £? –
Ciao Jon, grande fan del tuo.Essendo inglese, intendo £. –
@JonSkeet Molto interessante, mai visto in # in riferimento a "cancelletto", ma un rapido google fa apparire alcune buone informazioni. –