@VVVV - dann übergeben Sie wahrscheinlich eine Zeichenfolge anstelle einer Zahl . Wenn Sie eine Zeichenfolge haben, müssen Sie diese zuerst in float oder double konvertieren. Versuchen Siestring.Format("{0:n0}", Double.Parse(yourValue));
Diese Lösung ist aus Sicht der Internationalisierung nicht gut - andere Kulturen verwenden andere Zeichen ,als ein Tausendertrennzeichen, zum Beispiel ein Leerzeichen oder sogar ..
Justin
6
Funktioniert danke + 1. Haben erweitert, zeigt also bis zu 2 dp number.ToString ("#, ## 0. ##")
Crab Bucket
8
@MacSigler Es ist eigentlich nicht wahr, siehe Roger Lipscombes Kommentar zur obigen Antwort: String.Format wendet die Lokalisierung automatisch an.
Dan Bechard
10
@MacSigler Das ist die Sache, dieser Code druckt nicht immer ein Komma aus. Nur wenn die Kultur Kommas erwartet (z. B. en-US oder invariant). Wenn die Kultur ein anderes Trennzeichen erwartet (z. B. .), ersetzt .NET das Komma automatisch durch dieses Trennzeichen. Ich fordere Sie erneut auf, den von Roger geposteten Link zu lesen, wenn Sie immer noch nicht verstehen, warum dies so ist.
Dan Bechard
4
@MacSigler Justins Kommentar ist immer noch richtig, da er die Kultureinstellungen vom lokalen Computer erbt, wenn Sie die Kultur nicht explizit auf en-US zwingen. Nach meinem Verständnis würde das Kompilieren des obigen Codes und das anschließende Ausführen auf zwei Computern mit unterschiedlichen Kulturen (mit unterschiedlichen Zahlentrennzeichen) zu unterschiedlichen Ergebnissen führen. Wenn Sie möchten, dass immer ein Komma erzeugt wird, müssen Sie explizit eine Kultur festlegen, die das Komma verwendet (z. B. invariant).
Dan Bechard
98
Wenn Sie kulturspezifisch möchten, können Sie Folgendes ausprobieren:
Diese Antwort enthielt viele nützliche Informationen. Wenn ich anhand eines Beispiels lerne, sehe ich jetzt, was 0 und 1 im Zeichenfolgenformat bedeuten.
user420667
41
Dies ist das beste Format. Funktioniert in all diesen Fällen:
String.Format("{0:#,##0.##}",0);// 0String.Format("{0:#,##0.##}",0.5);// 0.5 - some of the formats above fail here. String.Format("{0:#,##0.##}",12314);// 12,314String.Format("{0:#,##0.##}",12314.23123);// 12,314.23String.Format("{0:#,##0.##}",12314.2);// 12,314.2String.Format("{0:#,##0.##}",1231412314.2);// 1,231,412,314.2
Die Methode ": n" ist besser, da sie das Gebietsschema des Benutzers berücksichtigen sollte.
Torlack
12
Dies ist wahr, aber es wird nicht garantiert, dass Sie bei Tausend Punkten Kommas erhalten, da dies das Gebietsschema des Benutzers berücksichtigt.
Stephen Wrighton
2
gleich wieder bei Ihnen: Das stimmt, aber es wird nicht garantiert, dass das Gebietsschema des Benutzers berücksichtigt wird, da Kommas als Tausendertrennzeichen verwendet werden. (In Portugal beispielsweise ist das Komma stattdessen das Dezimaltrennzeichen.)
ANeves
1
Wenn Sie Werte nach dem erzwingen möchten. Sie müssen das # durch eine 0 ersetzen. msdn.microsoft.com/en-us/library/0c899ak8(v=vs.110).aspx : Null ersetzt die Null durch die entsprechende Ziffer, falls eine vorhanden ist. Andernfalls wird in der Ergebniszeichenfolge Null angezeigt, während das Symbol "#" durch die entsprechende Ziffer ersetzt wird, falls eine vorhanden ist. Andernfalls wird in der Ergebniszeichenfolge keine Ziffer angezeigt.
Clarice Bouwer
Diese Methode funktionierte für meine Anforderung einwandfrei. Die msdn-Seite über die Int32.ToString-Methode, bei der es sich hauptsächlich um die Verwendung von msdn.microsoft.com/en-us/library/8wch342y.aspx handelt, ist für diese spezielle Methode nicht sehr hilfreich Anwendung entweder
stackuser83
33
Die am häufigsten gewählte Antwort war großartig und seit etwa 7 Jahren hilfreich. Mit der Einführung von C # 6.0 und speziell der String-Interpolation gibt es eine übersichtlichere und, IMO sicherer, Möglichkeit, das zu tun, was gefragt wurde to add commas in thousands place for a number:
var i =5222000;var s = $"{i:n} is the number";// results to > 5,222,000.00 is the number
s = $"{i:n0} has no decimal";// results to > 5,222,000 has no decimal
Wo die Variable i anstelle des Platzhalters gesetzt wird (dh {0}). Sie müssen sich also nicht merken, welches Objekt zu welcher Position gehört. Die Formatierung (dh :n) hat sich nicht geändert. Auf dieser Seite finden Sie eine vollständige Beschreibung der neuen Funktionen .
Wenn Sie ein "," -Trennzeichen unabhängig von der Kultur erzwingen möchten (z. B. in einer Ablaufverfolgungs- oder Protokollnachricht), funktioniert der folgende Code und hat den zusätzlichen Vorteil, dass Sie dem nächsten Benutzer genau mitteilen, was Sie tun.
int integerValue =19400320;string formatted =string.Format(CultureInfo.InvariantCulture,"{0:N0}", integerValue);
Im folgenden Beispiel werden mehrere Werte angezeigt, die mithilfe von benutzerdefinierten Formatzeichenfolgen formatiert werden, die keine Platzhalter enthalten.
Beachten Sie, dass der Wert, den Sie formatieren, numerisch sein sollte. Es sieht nicht so aus, als würde eine Zeichenfolgendarstellung einer Zahl benötigt, und das Format ist mit Kommas.
Mit einer solchen Funktion können Sie Zahlen formatieren und optional die gewünschten Dezimalstellen übergeben. Wenn keine Dezimalstellen angegeben werden, werden zwei Dezimalstellen verwendet.
Ich verwende Dezimalzahlen, aber Sie können den Typ in einen anderen ändern oder ein anonymes Objekt verwenden. Sie können auch eine Fehlerprüfung für negative Dezimalstellenwerte hinzufügen.
Die Methode, mit der ich mich nicht mehr um Kulturen und mögliche Formatierungsprobleme gekümmert habe, besteht darin, dass ich sie als Währung formatiert und anschließend das Währungssymbol entfernt habe.
Dieser Code ist nicht kulturunabhängig. Er verwendet die Standardkultur, die auf dem Computer festgelegt ist, auf dem der Code ausgeführt wird. Dies kann zu unerwünschten Ausgaben führen, bei denen diese Kultur ihre Währungssymbole am Ende der Zahl und nicht am Anfang (z. B. fr-FR) platziert oder mehr als ein Zeichen zur Bezeichnung der Währung verwendet (z. B. da-DK) oder Tausende nicht durch Kommas trennt (z. B. die meisten) vom europäischen Festland).
oder für eine robustere Methode möchten Sie möglicherweise das Gebietsschema eines bestimmten Ortes abrufen und dann wie folgt verwenden:
int n=9999999;Locale locale =newLocale("en","US");NumberFormat fmt =NumberFormat.getCurrencyInstance(locale);System.out.println(fmt.format(n));
US- Gebietsschema AUSGABE: 9.999.999,00 USD
Deutsche Gebietsschemaausgabe
Locale locale =newLocale("de","DE");
AUSGABE: 9.999.999,00 €
Ausgabe des indischen Gebietsschemas
Locale locale =newLocale("de","DE");
AUSGABE: Rs.9.999.999,00
Ausgabe des estnischen Gebietsschemas
Locale locale =newLocale("et","EE");
AUSGABE: 9 999 999 €
Wie Sie in verschiedenen Ausgaben sehen können, müssen Sie sich keine Sorgen machen, dass das Trennzeichen ein Komma oder ein Punkt oder sogar ein Leerzeichen ist. Sie können die Zahl gemäß den i18n-Standards formatieren lassen
gut richtig erkannt, ist es infact, um beim Abrufen der Währungsinstanz verwendet zu werden, wie: NumberFormat fmt = NumberFormat.getCurrencyInstance (Gebietsschema); Code korrigiert, danke!
Anirudh
3
Hast du die Tags überprüft? Die Frage ist über C # nicht Java!
Salar
-3
Wenn Sie es in DataGridview anzeigen möchten, sollten Sie seinen Typ ändern, da der Standardwert String ist und da Sie ihn in eine Dezimalzahl ändern, wird er als Zahl mit Gleitkomma betrachtet
Dim dt AsDataTable=NewDataTable
dt.Columns.Add("col1",GetType(Decimal))
dt.Rows.Add(1)
dt.Rows.Add(10)
dt.Rows.Add(2)DataGridView1.DataSource= dt
String.Format("{0:#,##0}", 1234);
funktioniert auch ohne Dezimalstellen.string.Format("{0:n0}", Double.Parse(yourValue));
Ich fand das der einfachste Weg:
quelle
quelle
,
als ein Tausendertrennzeichen, zum Beispiel ein Leerzeichen oder sogar.
..
), ersetzt .NET das Komma automatisch durch dieses Trennzeichen. Ich fordere Sie erneut auf, den von Roger geposteten Link zu lesen, wenn Sie immer noch nicht verstehen, warum dies so ist.Wenn Sie kulturspezifisch möchten, können Sie Folgendes ausprobieren:
(19950000.0).ToString("N",new CultureInfo("en-US"))
= 19.950.000,00(19950000.0).ToString("N",new CultureInfo("is-IS"))
= 19.950.000,00Hinweis: Einige Kulturen
,
bedeuten eher Dezimalzahl als.
Vorsicht.quelle
Standardformate mit ihren zugehörigen Ausgaben,
Beispielausgabe (en-us-Kultur):
quelle
Dies ist das beste Format. Funktioniert in all diesen Fällen:
quelle
Dadurch erhalten Sie an den entsprechenden Stellen Kommas.
quelle
Die am häufigsten gewählte Antwort war großartig und seit etwa 7 Jahren hilfreich. Mit der Einführung von C # 6.0 und speziell der String-Interpolation gibt es eine übersichtlichere und, IMO sicherer, Möglichkeit, das zu tun, was gefragt wurde
to add commas in thousands place for a number
:Wo die Variable
i
anstelle des Platzhalters gesetzt wird (dh{0}
). Sie müssen sich also nicht merken, welches Objekt zu welcher Position gehört. Die Formatierung (dh:n
) hat sich nicht geändert. Auf dieser Seite finden Sie eine vollständige Beschreibung der neuen Funktionen .quelle
so einfach ist das:
Weitere Infos finden Sie hier
quelle
Wenn Sie ein "," -Trennzeichen unabhängig von der Kultur erzwingen möchten (z. B. in einer Ablaufverfolgungs- oder Protokollnachricht), funktioniert der folgende Code und hat den zusätzlichen Vorteil, dass Sie dem nächsten Benutzer genau mitteilen, was Sie tun.
Sätze formatiert auf "19.400.320"
quelle
Im folgenden Beispiel werden mehrere Werte angezeigt, die mithilfe von benutzerdefinierten Formatzeichenfolgen formatiert werden, die keine Platzhalter enthalten.
Oder
Ergebnis "29,255.0"
Oder
Ergebnis "29.255,00"
quelle
quelle
Einfacher, mit String-Interpolation anstelle von String.Format
oder mit yourVariable
quelle
Zum Beispiel
String.Format("{0:0,0}", 1);
gibt 01 zurück, für mich ist es nicht gültigDas funktioniert bei mir
Ausgabe 19.950.000
quelle
Beachten Sie, dass der Wert, den Sie formatieren, numerisch sein sollte. Es sieht nicht so aus, als würde eine Zeichenfolgendarstellung einer Zahl benötigt, und das Format ist mit Kommas.
quelle
quelle
C # 7.1 (vielleicht früher?) Macht dies mit String-Interpolation so einfach und gut aussehend, wie es sein sollte:
quelle
Mit einer solchen Funktion können Sie Zahlen formatieren und optional die gewünschten Dezimalstellen übergeben. Wenn keine Dezimalstellen angegeben werden, werden zwei Dezimalstellen verwendet.
Ich verwende Dezimalzahlen, aber Sie können den Typ in einen anderen ändern oder ein anonymes Objekt verwenden. Sie können auch eine Fehlerprüfung für negative Dezimalstellenwerte hinzufügen.
quelle
Die Methode, mit der ich mich nicht mehr um Kulturen und mögliche Formatierungsprobleme gekümmert habe, besteht darin, dass ich sie als Währung formatiert und anschließend das Währungssymbol entfernt habe.
if (decimal.TryParse(tblCell, out result))
quelle
fr-FR
) platziert oder mehr als ein Zeichen zur Bezeichnung der Währung verwendet (z. B.da-DK
) oder Tausende nicht durch Kommas trennt (z. B. die meisten) vom europäischen Festland).Unten ist eine gute Lösung in Java!
oder für eine robustere Methode möchten Sie möglicherweise das Gebietsschema eines bestimmten Ortes abrufen und dann wie folgt verwenden:
US- Gebietsschema AUSGABE: 9.999.999,00 USD
Deutsche Gebietsschemaausgabe
AUSGABE: 9.999.999,00 €
Ausgabe des indischen Gebietsschemas
AUSGABE: Rs.9.999.999,00
Ausgabe des estnischen Gebietsschemas
AUSGABE: 9 999 999 €
Wie Sie in verschiedenen Ausgaben sehen können, müssen Sie sich keine Sorgen machen, dass das Trennzeichen ein Komma oder ein Punkt oder sogar ein Leerzeichen ist. Sie können die Zahl gemäß den i18n-Standards formatieren lassen
quelle
locale
?Wenn Sie es in DataGridview anzeigen möchten, sollten Sie seinen Typ ändern, da der Standardwert String ist und da Sie ihn in eine Dezimalzahl ändern, wird er als Zahl mit Gleitkomma betrachtet
quelle