Ich muss ein Preisfeld anzeigen, das manchmal entweder 100 oder 100,99 oder 100,9 sein kann. Ich möchte den Preis nur dann in 2 Dezimalstellen anzeigen, wenn die Dezimalstellen für diesen Preis eingegeben werden, zum Beispiel, wenn es 100 ist, sollte es nur so sein zeige 100 nicht 100.00 und wenn der Preis 100.2 ist, sollte es 100.20 ähnlich anzeigen, für 100.22 sollte es gleich sein. Ich habe gegoogelt und bin auf einige Beispiele gestoßen, aber sie passten nicht genau zu dem, was ich wollte:
// just two decimal places
String.Format("{0:0.00}", 123.4567); // "123.46"
String.Format("{0:0.00}", 123.4); // "123.40"
String.Format("{0:0.00}", 123.0); // "123.00"
c#
regex
string-formatting
number-formatting
Herr A.
quelle
quelle
Antworten:
Ein uneleganter Weg wäre:
Mit
DoFormat
so etwas wie:Nicht elegant, aber in einigen Projekten in ähnlichen Situationen für mich zu arbeiten.
quelle
CurrentCulture
Dezimaltrennzeichen möglicherweise nicht vorhanden.
. WennCultureInfo.InvariantCulture
es nicht mit verwendet wirdstring.Format
, müssten Sie den Wert von überprüfenCultureInfo.NumberFormat.NumberDecimalSeparator
, und das wäre eine echte PITA. :)60000
int habe und ich möchte, dass es so ist60.000
?Entschuldigung für die Reaktivierung dieser Frage, aber ich habe hier nicht die richtige Antwort gefunden.
Bei der Formatierung von Zahlen können Sie diese
0
als obligatorischen Ort und#
als optionalen Ort verwenden.So:
Sie können auch kombinieren
0
mit#
.Für diese Formatierungsmethode wird immer verwendet
CurrentCulture
. Für einige Kulturen.
wird auf geändert,
.Antwort auf die ursprüngliche Frage:
Die einfachste Lösung kommt von @Andrew ( hier ). Also würde ich persönlich so etwas verwenden:
quelle
Dies ist ein gängiger Anwendungsfall für die Formatierung von schwebenden Zahlen.
Leider erreichen dies nicht alle integrierten Zeichenfolgen im Ein-Buchstaben-Format (z. B. F, G, N) direkt.
Zum Beispiel
num.ToString("F2")
werden immer 2 Dezimalstellen wie angezeigt123.40
.Sie müssen
0.##
Muster verwenden , auch wenn es ein wenig ausführlich aussieht.Ein vollständiges Codebeispiel:
quelle
Alte Frage, aber ich wollte meiner Meinung nach die einfachste Option hinzufügen.
Ohne Tausende Trennzeichen:
Mit Tausenden von Trennzeichen:
Das gleiche, aber mit String.Format :
Wenn Sie es an vielen Stellen benötigen , würde ich diese Logik in einer Erweiterungsmethode verwenden :
quelle
Versuchen
quelle
Ich weiß sowieso nicht, ob ich eine Bedingung in den Formatbezeichner einfügen soll, aber Sie können Ihren eigenen Formatierer schreiben:
quelle
Hier ist eine Alternative zu Uwe Keims Methode, die immer noch denselben Methodenaufruf beibehalten würde:
Mit
MyCustomFormat
so etwas wie:quelle
CurrentCulture
Dezimaltrennzeichen möglicherweise nicht vorhanden.
. Wenn nichtCultureInfo.InvariantCulture
mit verwendet wirdstring.Format
, müssten Sie den Wert von überprüfenCultureInfo.NumberFormat.NumberDecimalSeparator
, was ziemlich unelegant ist.Einfacher einzeiliger Code:
quelle
Wenn Ihr Programm schnell ausgeführt werden muss, rufen Sie value.ToString (formatString) auf, um eine um ~ 35% schnellere Zeichenfolgenformatierungsleistung im Vergleich zu $ "{value: formatString}" und string.Format (formatString, value) zu erzielen.
Daten
Code
Code-Ausgabe
Verweise
Benutzerdefinierte Zeichenfolgen im numerischen Format [docs.microsoft.com]
Qt Charts BarChart Beispiel [doc.qt.io]
quelle
Ich fürchte, es gibt kein eingebautes Format, das dies ermöglicht. Sie müssen ein anderes Format verwenden, je nachdem, ob der Wert eine ganze Zahl ist oder nicht. Oder formatieren Sie immer mit 2 Dezimalstellen und bearbeiten Sie die Zeichenfolge anschließend, um alle nachgestellten ".00" zu entfernen.
quelle
Wenn keine der anderen Antworten für Sie funktioniert, liegt dies möglicherweise daran, dass Sie das
ContentProperty
Steuerelement in derOnLoad
Funktion binden. Dies bedeutet, dass dies nicht funktioniert:Die Lösung ist einfach: Es gibt eine
ContentStringFormat
Eigenschaft in der xaml. Wenn Sie das Etikett erstellen, gehen Sie wie folgt vor:Oder
quelle
so etwas wird auch funktionieren:
quelle
Versuchen:
quelle
Um den Code, den Kahia geschrieben hat, klarer zu machen (es ist klar, wird aber schwierig, wenn Sie mehr Text hinzufügen möchten) ... versuchen Sie diese einfache Lösung.
Ich musste die zusätzliche Umwandlung (dezimal) hinzufügen, damit Math.Round die beiden dezimalen Variablen vergleichen konnte.
quelle
Das hat bei mir funktioniert!
quelle
Wenn Sie mit Dezimalstellen aus einer (T-) SQL-Datenbank arbeiten, möchten Sie in der Lage sein, nullbare und nicht nullbare Dezimalstellen mit x Dezimalstellen zu konvertieren und den Code einfach anhand Ihrer Tabellendefinitionen zu überprüfen - und natürlich die anzuzeigen richtige Anzahl von Dezimalstellen für den Benutzer.
Leider konvertiert das Entity Framework so etwas wie SQL nicht automatisch
decimal(18,2)
in ein .NET-Äquivalent mit der gleichen Anzahl von Dezimalstellen (da nur Dezimalstellen mit voller Genauigkeit verfügbar sind). Sie müssen die Dezimalstellen manuell abschneiden.Also habe ich es so gemacht:
Anwendungsbeispiel:
quelle