2009-11-24 12 views
155

quello che voglio è qualcosa di simile:Formato decimale per valori percentuali?

String.Format("Value: {0:%%}.", 0.8526) 

Dove %% è che provider di formato o qualsiasi altra cosa che sto cercando. In caso di risultato: Value: %85.26..

Io fondamentalmente bisogno per vincolante WPF, ma prima cerchiamo di risolvere il problema di formattazione generale:

<TextBlock Text="{Binding Percent, StringFormat=%%}" /> 

risposta

345

Utilizzare la P format string. Questo può variare dalla cultura:

String.Format("Value: {0:P2}.", 0.8526) // formats as 85.26 % (varies by culture) 
+0

[Guardando qui grande differenza è come gli Stati Uniti e la Francia tipo.] (Http://msdn.microsoft.com/en-us/library/dwhawy9k%28v=vs.110%29.aspx) Se sopra varia per cultura, c'è una formattazione 'P' indipendente dalla cultura? – bonCodigo

+0

@bonCodigo: se si desidera l'output per una cultura specifica, specificare la cultura in modo esplicito. –

3

Se si dispone di un buon motivo per mettere da parte la formattazione cultura-dipendenti e ottenere il controllo esplicito sulla necessità o meno c'è uno spazio tra il valore ed il "%", e se il " % "è iniziale o finale, è possibile utilizzare le proprietà PercentPositivePattern e PercentNegativePattern di NumberFormatInfo.

Ad esempio, per ottenere un valore decimale con un trailing "%" e nessuno spazio tra il valore ed il "%":

myValue.ToString("P2", new NumberFormatInfo { PercentPositivePattern = 1, PercentNegativePattern = 1 }); 

più completo esempio:

using System.Globalization; 

... 

decimal myValue = -0.123m; 
NumberFormatInfo percentageFormat = new NumberFormatInfo { PercentPositivePattern = 1, PercentNegativePattern = 1 }; 
string formattedValue = myValue.ToString("P2", percentageFormat); // "-12.30%" (in en-us) 
-7

ho ho trovato la risposta sopra come la soluzione migliore, ma non mi piace lo spazio iniziale prima del segno di percentuale. Ho visto soluzioni un po 'complicate, ma uso semplicemente questa aggiunta Sostituire alla risposta sopra invece di utilizzare altre soluzioni di arrotondamento.

String.Format("Value: {0:P2}.", 0.8526).Replace(" %","%") // formats as 85.26% (varies by culture) 
+0

E ancora sbagliato, se si vuole forzare tale input così tanto si potrebbe mettere il numero come float e aggiungere il segno di percentuale, poiché la sostituzione è costosa e in questo caso non molto utile "String.Format (" Valore: {0: F2 }. ", 0.8526 * 100)" – rekiem87

+0

totalmente d'accordo con rekiem87 – Defkon1

Problemi correlati