2009-06-02 13 views
19

Wie formatiere ich im .NET eine Zahl als Prozentsatz, ohne das Prozentzeichen anzuzeigen?Wie formatiert man eine Zahl als Prozentsatz ohne das Prozentzeichen?

Wenn ich die Nummer haben 0.13 und verwenden Sie die Format-String {0:P0} die Ausgabe 13 %.

Allerdings Ich mag würde 13 stattdessen ohne erhalten, die {0:N0} die Zahl von 100 und mit dem Format-String zu multiplizieren.

(Hintergrund:. In ASP.NET Ich habe eine Gridview mit einem Boundfield, wo ich möchte eine Zahl als Prozentsatz angezeigt werden, aber ohne die Prozentzeichen (%) Wie kann ich das tun?)


Danke für die Antworten. Zum Zeitpunkt der Bearbeitung schlagen 4 von 6 vor, was ich vermeiden möchte, wie oben erläutert. Ich war auf der Suche nach einem Weg, nur ein Format-String zu verwenden, und vermeiden mit 100 multipliziert und mit {0:N0}, aber die Antworten zeigen, das ist unmöglich ...


gelöst durch die akzeptierte Lösung von Richard mit:


public class MyCulture : CultureInfo 
{ 
    public MyCulture() 
     : base(Thread.CurrentThread.CurrentCulture.Name) 
    { 
     this.NumberFormat.PercentSymbol = ""; 
    } 
} 

Thread.CurrentThread.CurrentCulture = new MyCulture(); 
+1

Was ist falsch bei der Multiplikation mit 100? –

+2

Es ist nichts falsch daran; außer ich möchte die Anzeige einer Nummer ändern, ohne die Datenabfrage zu ändern. Insbesondere möchte ich wissen, wie eine Nummer wie z.B. 0.13 als 13 in einem BoundField in ASP.NET - ohne das Prozentzeichen. –

Antwort

15

Definieren Sie eine benutzerdefinierte Kultur mit ihren eigenen NumberFormatInfo die String.Empty für seine PercentSymbol Eigenschaft gibt.

Verwenden Sie dann diese benutzerdefinierte Kultur für betroffene Seiten (oder für die gesamte Anwendung). Dies könnte durch Klonen von der Standardeinstellung erfolgen, so dass andere regionale Einstellungen beibehalten werden.

+0

Danke! Ja, das macht den Trick! –

14

Warum multiplizieren Sie einfach die Zahl mit 100 und verwenden Sie Ihre "{0:N0}" Formatzeichenfolge? Das scheint mir die einfachste Lösung zu sein.

Wenn Sie keinen vernünftigen Grund finden, warum das nicht in Frage kommt, ist das mein Rat. Es ist kein Hexenwerk :-)

+0

+1 Es ist entweder das oder schneiden Sie das% -Zeichen nach der Formatierung auf {0: P0} – fretje

+0

Danke. Bedeutet das, dass es keine Möglichkeit gibt, die Zahl in einer Formatzeichenfolge zu skalieren? Vielleicht sollte ich eine andere Frage formulieren. –

2

Die MSDN * hat dies unter „Benutzerdefinierte Zahlenformat Strings“:

Das Vorhandensein eines ‚%‘ Zeichen in einem Format-String verursacht eine Reihe multipliziert werden um 100, bevor es formatiert ist. Das entsprechende Symbol ist eingefügt in der Nummer selbst unter der Position, wo das '%' in der Format Zeichenfolge angezeigt wird. Das verwendete Prozentzeichen ist abhängig von der aktuellen NumberFormatInfo-Klasse.

Aber das Beispiel zeigt, dass es auch das% -Zeichen gibt - nicht das, was Sie wollen, aber vielleicht einstellbar auf nichts über die Number Klasse?

Aber ich stimme mit Pax und kann nicht sehen, warum mit dem * gehen Sie nicht 100 und {0: N0}

** Zugriff von Visual Studio aus, so dass keine Verbindung *

2

Wie wäre es damit ...

String.Format("{0:P0}",0.13).Replace("%","") 

EDIT: diese ganzen Welt funktionieren sollte:

var percentSymbol = CultureInfo.CurrentCulture.NumberFormat.PercentSymbol; 
String.Format("{0:P0}",0.13).Replace(percentSymbol,"") 

Es gibt auch this solution, die eleganter sein können, aber etwas mehr Code.

+1

Replace ("%" ... - Ich Ding, das ein Leerzeichen enthält ... oder trim rechts das Endergebnis :) – balexandre

+4

Dies könnte in einigen Situationen fehlschlagen, das% Zeichen verwendet wird durch Kultur beeinflusst. – CiscoIPPhone

+0

+1 "von Kultur beeinflusst" –

5

aber mit 100 zu multiplizieren ist genau das, was Sie wollen!

protected void myGrdiView_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     myObjectType ot = (myObjectType)e.Row.DataItem; 

     ot.myNumber = ot.myNumber * 100; // multiply by 100 
    } 
} 

und im HTML-

<asp:BoundField DataType="myNumber" HeaderText="%" StringFormat="{0:N0}" /> 
0

Wie wärs mit einem Trimm?

0

Ein Punkt, der zuerst betrachtet werden sollte, ein Prozentwert, der ohne% angezeigt wird, ist eine Zahl, daher ignorieren wir den prozentualen Aspekt. Sie möchten wissen, wie eine Zahl von 1 oder weniger als 100 oder weniger angezeigt wird. Ich schätze, dass es gebunden ist, so dass Sie es zur Anzeigezeit nicht ändern können, also warum nicht zur Abfragezeit ändern, d. H. SELECT (Wert * 100) AS Percentage, ...?

0

Man könnte auch so etwas wie versuchen

string newString = "0.13".Replace("0.", string.Empty) + "%"; 
Verwandte Themen