Gibt es einen Anzeigeformatierer, der Dezimalstellen als diese Zeichenfolgendarstellungen in c # ausgibt, ohne eine Rundung vorzunehmen?
// decimal -> string
20 -> 20
20.00 -> 20
20.5 -> 20.5
20.5000 -> 20.5
20.125 -> 20.125
20.12500 -> 20.125
0.000 -> 0
{0. #} wird gerundet, und die Verwendung einer Funktion zum Zuschneiden funktioniert nicht mit einer gebundenen numerischen Spalte in einem Raster.
c#
formatting
decimal
JC.
quelle
quelle
"0.0#"
.Ich habe gerade gelernt, wie man den
G
Formatbezeichner richtig verwendet . Siehe die MSDN-Dokumentation . Etwas weiter unten befindet sich ein Hinweis, der besagt, dass nachgestellte Nullen für Dezimaltypen beibehalten werden, wenn keine Genauigkeit angegeben ist. Warum sie dies tun würden, weiß ich nicht, aber die Angabe der maximalen Anzahl von Stellen für unsere Genauigkeit sollte dieses Problem beheben. Für die Formatierung von DezimalstellenG29
ist dies die beste Wahl.quelle
Dieses Zeichenfolgenformat sollte Ihren Tag bestimmen: "0. ###############################". Beachten Sie jedoch, dass Dezimalstellen höchstens 29 signifikante Stellen haben können.
Beispiele:
quelle
Dies ist eine weitere Variation dessen, was ich oben gesehen habe. In meinem Fall muss ich alle signifikanten Ziffern rechts vom Dezimalpunkt beibehalten, dh alle Nullen nach der höchstwertigen Ziffer löschen. Ich dachte nur, es wäre schön zu teilen. Ich kann zwar nicht für die Effizienz bürgen, aber wenn Sie versuchen, Ästhetik zu erreichen, sind Sie bereits zu Ineffizienzen verdammt.
Das ist alles, ich wollte nur meine zwei Cent einwerfen.
quelle
strValue.TrimEnd('0').TrimEnd('.')
statt desEndsWith
Schecks?Eine andere Lösung, die auf der Antwort von Legastheniker basiert , jedoch unabhängig von der aktuellen Kultur ist:
quelle
Verlängerungsmethode:
Beispielcode:
Ausgabe:
quelle
IndexOf
Zeichen innerhalb einer Zeichenfolge zu finden. Es ist ziemlich einfach, das Beispiel anzupassen, um das Problem ohne Dezimalstellen zu lösen.Ich denke nicht, dass es sofort möglich ist, aber eine einfache Methode wie diese sollte es tun
quelle
Es ist ganz einfach, sofort loszulegen:
Dadurch werden alle nachgestellten Nullen aus Ihrer Dezimalzahl entfernt.
Das einzige, was Sie tun müssen, ist das Hinzufügen
.ToString().TrimEnd('0','.');
zu einer Dezimalvariablen, um aDecimal
in eineString
ohne nachgestellte Nullen umzuwandeln , wie im obigen Beispiel.In einigen Regionen sollte es ein sein
.ToString().TrimEnd('0',',');
(wo sie ein Komma anstelle eines Punktes verwenden, aber Sie können auch einen Punkt und ein Komma als Parameter hinzufügen, um sicherzugehen).(Sie können auch beide als Parameter hinzufügen)
quelle
params
Sie dies nicht , aber wenn Sie sich mit einem Argument befassen , müssen Sie kein Array explizit erstellen. Anstelle des Ausführlichen könnenTrimEnd("0".ToCharArray())
Sie also einfach schreibenTrimEnd('0')
(Hinweis: Singlechar
statt a übergebenchar[]
).char
, kein a übergebenstring
(also: einfache Anführungszeichen, keine doppelten Anführungszeichen). Ich habe es für dich repariert - hoffentlich macht es dir nichts aus.quelle
Am Ende hatte ich folgenden Code:
quelle
Ich bin mit dieser Variante gelandet:
Vorteile:
Sie können die maximale Anzahl von signifikanten Stellen nach dem Punkt angeben, der zur Laufzeit angezeigt werden soll.
Sie können explizit eine runde Methode angeben.
Sie können eine Kultur explizit steuern.
quelle
Sie können eine Erweiterungsmethode erstellen
quelle
Ich habe die folgenden Erweiterungsmethoden für mich erstellt, um sie an eines meiner Projekte anzupassen, aber vielleicht sind sie für andere von Vorteil.
Es wird jedoch ein Verweis auf erforderlich sein
System.Numerics
.quelle