Limitierung auf 3 Dezimalstellen
Dieser ich, was ich versuche zu erreichen:
Ob Sie ein Doppel-hat mehr als 3 Nachkommastellen, ich abschneiden möchten alle Dezimalstellen, die nach dem Dritten. (nicht zu Runden.)
Eg.: 12.878999 -> 12.878
Ob Sie ein Doppel-hat weniger als 3 Nachkommastellen, unverändert lassen
Eg.: 125 -> 125
89.24 -> 89.24
Stieß ich auf diesen Befehl:
double example = 12.34567;
double output = Math.Round(example, 3);
Aber ich will nicht zu Runde. Nach dem Befehl oben geschrieben
12.34567 -> 12.346
Will ich kürzen Sie den Wert so ein, dass Sie es wird: 12.345
Kommentar zu dem Problem - Öffnen
InformationsquelleAutor der Frage xbonez | 2010-09-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verdoppelt haben keine Nachkommastellen, sind Sie nicht basiert auf Dezimalstellen, mit zu beginnen. Sie könnte "die nächste verdoppeln, um den aktuellen Wert, der, wenn abgeschnitten-auf drei Dezimalstellen", aber es wäre trotzdem nicht genau das gleiche. Sie wären besser dran mit
decimal
.Having said,,, wenn es nur der Weg, die Rundung geschieht, das ist ein problem, können Sie
Math.Truncate(value * 1000) /1000;
die kann tun, was Sie wollen. (Sie wollen nicht Rundung an alle, die von den Klängen von ihm.) Es ist immer noch potentiell "dodgy" obwohl das Ergebnis noch nicht wirklich nur drei Dezimalstellen. Wenn Sie getan haben die gleiche Sache mit einem dezimalen Wert, aber es würde Arbeit:EDIT: Wie LBushkin darauf hingewiesen, sollten Sie klar zwischen dem abschneiden für display Zwecke (was in der Regel getan werden, in einem format specifier) abschneiden und für weitere Berechnungen (in dem Fall der oben sollte funktionieren).
InformationsquelleAutor der Antwort Jon Skeet
Ich kann nicht denken, ein Grund, um explizit zu verlieren Präzision, die außerhalb der Anzeige. In diesem Fall verwenden Sie einfach die string-Formatierung.
InformationsquelleAutor der Antwort Chris Martin
InformationsquelleAutor der Antwort Merin Nakarmi
Multiplizieren mit 1000, dann verwenden Sie Truncate dann geteilt durch 1000.
InformationsquelleAutor der Antwort Josh
Wenn Ihr Zweck in der Rundung der Dezimalstellen für die Anzeige Gründen, dann müssen Sie nur verwenden Sie einfach einen entsprechenden Formatierungen beim konvertieren des double in einen string.
Methoden wie
String.Format()
undConsole.WriteLine()
(und andere) ermöglichen es Ihnen, um die Anzahl der Ziffern für die Genauigkeit einen Wert formatiert ist, mit.Versuch, "truncate" floating point zahlen ist schlecht beraten - floating-point-zahlen nicht eine genaue dezimale Darstellung in vielen Fällen. Die Anwendung eines Konzepts wie die Skalierung der Zahl, abschneiden, und dann die Skalierung nach unten könnte Sie leicht ändern Sie den Wert auf etwas ganz anders aus, was Sie würden erwarten, für die "verkürzte" - Wert.
Wenn Sie brauchen eine präzise dezimal-Darstellungen einer Zahl, die Sie verwenden sollten
decimal
eher alsdouble
oderfloat
.InformationsquelleAutor der Antwort LBushkin
Können Sie verwenden:
InformationsquelleAutor der Antwort Pablo Santa Cruz
Guten Antworten oben, wenn du nach etwas suchst, wiederverwendbare hier ist der code. Beachten Sie, dass möchten Sie vielleicht, um die Dezimalstellen Wert, und dieser kann überlaufen.
InformationsquelleAutor der Antwort Mike M.
In C lang:
InformationsquelleAutor der Antwort alsantos123