Nullen hinter dem Komma bei decimal abschneiden
-
decimal d = 12.4360m; string s = d.ToString(); var split = s.Split('.', ','); if (split.Length > 1) s = split[0] + "." + split[1].TrimEnd('0');
-
Den Fall 12.000 habe ich vergessen:
decimal d = 12.000m; string s = d.ToString(); var split = s.Split('.', ','); if (split.Length > 1) if (split[1].All(c => c == '0')) s = split[0]; else s = split[0] + "." + split[1].TrimEnd('0');
-
Gibt's da keine saubere, vom .NET-Framework vorgesehene Möglichkeit statt dieses ganze Rumfrickeln?
-
Nicht dass ich wüsste, aber wenn du bei meiner Methode eine Nachkommastelle mehr als nötig in den Formatstring nimmst und diese hinterher dann verwirfst, hast du das Runden auch erledigt.
-
Der Fonz schrieb:
Gibt's da keine saubere, vom .NET-Framework vorgesehene Möglichkeit statt dieses ganze Rumfrickeln?
Pack die Frickelei in eine Funktion, teste sie ausgiebig, lagere sie in eine Util-DLL aus. Anders macht es das Framework auch nicht
-
Meine Lösung ist doch sauber:
decimal d = 12.3400000m; string s = Normalize(d).ToString(); // => 12.34
-
Decimal val = 12.4368m; Console.WriteLine("{0}", Decimal.Truncate(val*1000) /1000); Console.WriteLine("{0}", Decimal.Round(val - 0.0005m, 3, MidpointRounding.AwayFromZero));
-
Th69 hat echt eine gute Lösung obwohl ich nicht raffe, warum sie funktioniert.
loks und GPC gehen von fester Stellenzahl aus ... naja.
-
Die Lösung habe ich von Remove trailing zeros?
-
Vielleicht dürfte auch noch die andere Antwort in dem Thread auf Stackoverflow sinnvoll sein:
http://stackoverflow.com/a/9391762Vor allem weil das die einzige Lösung ist, welche keinerlei Tricks verwendet. Das mit der Division setzt ja auf ein nicht weiter dokumentiertes Verhalten von
Decimal
.12.24500m.ToString("#.#############################");
Oder auch weniger als 29 '#' hinter dem Komma, falls klar ist, dass die Zahlen sowieso nie mehr als x Nachkommastellen haben sollen.
Grüssli