Wenn der aktuelle Wert einer Dezimalstelle mit angezeigt wird .ToString()
, entspricht dies genau 15 Dezimalstellen. Da ich damit Dollar und Cent darstelle, möchte ich, dass die Ausgabe nur 2 Dezimalstellen beträgt.
Benutze ich dafür eine Variation von .ToString()
?
Decimal
andDouble
typeToString
akzeptiert Argumente für die Formatierung. Konvertieren Sie zuerst Ihren Wert in Decimal / Double.Ich weiß, dass dies eine alte Frage ist, aber ich war überrascht zu sehen, dass niemand eine Antwort darauf zu posten schien;
Dies ist, was ich verwenden würde:
http://msdn.microsoft.com/en-us/library/9s0xa85y.aspx
quelle
Dieser Wille:
23.456
→23.46
23
→23.00
;12.5
→12.50
Ideal zum Anzeigen von Währungen.
Lesen Sie die Dokumentation zu ToString ("F") (danke an Jon Schneider).
quelle
.
kann,
aufgrund der Kultur durch ersetzt werden. Sie solltenCultureInfo.InvariantCulture
als zweites Argument angeben, um dies zu deaktivieren.Wenn Sie dies nur für die Anzeige benötigen, verwenden Sie string.Format
http://www.csharp-examples.net/string-format-double/
Das "m" ist ein Dezimalsuffix. Über das Dezimalsuffix:
http://msdn.microsoft.com/en-us/library/364x0z75.aspx
quelle
Gegebene Dezimalstelle d = 12,345; Die Ausdrücke d.ToString ("C") oder String.Format ("{0: C}", d) ergeben 12,35 USD. Beachten Sie, dass die Währungseinstellungen der aktuellen Kultur einschließlich des Symbols verwendet werden.
Beachten Sie, dass "C" die Anzahl der Ziffern aus der aktuellen Kultur verwendet. Sie können jederzeit außer Kraft setzen Standard notwendige Präzision zu zwingen ,
C{Precision specifier}
wieString.Format("{0:C2}", 5.123d)
.quelle
Wenn Sie möchten, dass es mit Kommas sowie einem Dezimalpunkt (aber ohne Währungssymbol) formatiert wird, z. B. 3.456.789,12 ...
quelle
Es gibt bereits zwei Antworten mit hoher Punktzahl, die sich auf Decimal.Round (...) beziehen, aber ich denke, es ist etwas mehr Erklärung erforderlich - da es eine unerwartet wichtige Eigenschaft von Decimal gibt, die nicht offensichtlich ist.
Eine Dezimalstelle "weiß", wie viele Dezimalstellen sie hat, je nachdem, woher sie stammt.
Zum Beispiel kann Folgendes unerwartet sein:
Wenn Sie dieselben Operationen mit ausführen,
Double
werden"25"
für jede der oben genannten Optionen keine Dezimalstellen ( ) angegeben.Wenn Sie eine Dezimalstelle mit 2 Dezimalstellen wünschen, liegt die Wahrscheinlichkeit bei 95%, weil es sich um eine Währung handelt. In diesem Fall ist dies wahrscheinlich in 95% der Fälle in Ordnung:
Oder in XAML verwenden Sie einfach
{Binding Price, StringFormat=c}
Ein Fall, in dem ich eine Dezimalstelle als Dezimalzahl benötigte, war das Senden von XML an den Webservice von Amazon. Der Dienst hat sich beschwert, weil ein Dezimalwert (ursprünglich von SQL Server) als gesendet
25.1200
und abgelehnt wurde (25.12
war das erwartete Format).Ich musste nur
Decimal.Round(...)
2 Dezimalstellen verwenden, um das Problem zu beheben.TypedValue
ist vom Typ,Decimal
also konnte ich es nicht einfach tunToString("N2")
und musste es abrunden und als behaltendecimal
.quelle
Hier ist ein kleines Linqpad-Programm, um verschiedene Formate anzuzeigen:
Hier sind die Ergebnisse:
quelle
Math.Round-Methode (Dezimal, Int32)
quelle
Sehr selten möchten Sie eine leere Zeichenfolge, wenn der Wert 0 ist.
Die am besten bewertete Antwort ist falsch und hat 10 Minuten (der meisten) Zeit verschwendet.
quelle
"#"
bedeutet im Grunde Ziffer der Zahl (falls erforderlich) (ohne Auffüllen, wenn nicht benötigt)"0"
bedeutet Ziffer der Zahl (Die Antwort von Mike M. war perfekt für mich in .NET, aber .NET Core hat
decimal.Round
zum Zeitpunkt des Schreibens keine Methode.In .NET Core musste ich Folgendes verwenden:
Eine hackige Methode, einschließlich der Konvertierung in einen String, ist:
quelle
Keiner von diesen hat genau das getan, was ich brauchte, um 2 dp zu erzwingen und als aufzurunden
0.005 -> 0.01
Um 2 dp zu erzwingen, muss die Genauigkeit um 2 dp erhöht werden, um sicherzustellen, dass mindestens 2 dp vorhanden sind
dann runden, um sicherzustellen, dass wir nicht mehr als 2 dp haben
quelle
Die am besten bewertete Antwort beschreibt eine Methode zum Formatieren der Zeichenfolgendarstellung des Dezimalwerts und funktioniert.
Wenn Sie jedoch die gespeicherte Genauigkeit auf den tatsächlichen Wert ändern möchten, müssen Sie Folgendes schreiben:
Ein Beispiel für einen Unit-Test:
quelle
Mit system.globalization können Sie eine Zahl in einem beliebigen Format formatieren.
Zum Beispiel:
Wenn Sie eine haben
decimal d = 1.2300000
und diese auf 2 Dezimalstellend.Tostring("F2",ci);
kürzen müssen, kann sie wie folgt gedruckt werden, wobei F2 eine Zeichenfolge mit 2 Dezimalstellen ist und ci das Gebietsschema oder die Kulturinfo ist.Weitere Informationen finden Sie unter folgendem Link:
http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx
quelle
https://msdn.microsoft.com/en-us/library/dwhawy9k%28v=vs.110%29.aspx
Dieser Link erklärt ausführlich, wie Sie mit Ihrem Problem umgehen können und was Sie tun können, wenn Sie mehr erfahren möchten. Der Einfachheit halber möchten Sie Folgendes tun
Wenn Sie dies für eine Währung wünschen, können Sie es einfacher machen, indem Sie "C2" anstelle von "F2" eingeben.
quelle
quelle
Wenn Sie nur 2 Dezimalstellen behalten müssen (dh alle restlichen Dezimalstellen abschneiden):
Wenn Sie nur 3 Dezimalstellen behalten müssen:
quelle