Ich möchte dies mit der Math.Round
Funktion tun
c#
decimal
rounding
bankers-rounding
Rex M.
quelle
quelle
0.005
auf die Zahl vor dem Runden. Zum Abrunden subtrahieren Sie ebenfalls,0.005
bevor Sie zurMath.Round
Funktion übergehen.MidPointRounding.ToEven
(auch als "Bankers Rounding" bezeichnet) verwendet wird, ist, dass wir alle gelernt haben, in der Schule zu runden, wo .5-Aufrundungen zu viele Aufrundungen verursachen. Dies ist ein Problem beim Umgang mit Geld, Steuerberechnungen usw.Versuche dies:
quelle
Persönlich runde ich nie etwas. Halten Sie es so entschlossen wie möglich, da das Runden in CS sowieso ein bisschen wie ein roter Hering ist. Sie möchten jedoch Daten für Ihre Benutzer formatieren, und zu diesem Zweck halte ich dies für
string.Format("{0:0.00}", number)
einen guten Ansatz.quelle
Wenn Sie eine Zeichenfolge möchten
Oder eine Dezimalstelle
Aber erinnere dich! Rundung ist nicht verteilend, dh.
round(x*y) != round(x) * round(y)
. Machen Sie also bis zum Ende einer Berechnung keine Rundung, sonst verlieren Sie an Genauigkeit.quelle
Wikipedia hat eine schöne Seite zum Runden im Allgemeinen.
Alle (verwalteten) .NET-Sprachen können einen der CLR-Rundungsmechanismen (Common Language Runtime) verwenden. Mit der Math.Round () -Methode ( wie oben erwähnt) kann der Entwickler beispielsweise die Art der Rundung angeben (Round-to-Even oder Away-from-Zero). Die Convert.ToInt32 () -Methode und ihre Variationen verwenden Round-to-Even . Die Methoden Ceiling () und Floor () sind miteinander verbunden.
Sie können auch mit benutzerdefinierten numerischen Formatierungen runden .
Beachten Sie, dass Decimal.Round () eine andere Methode verwendet als Math.Round ().
Hier ist eine nützliche Position zum Rundungsalgorithmus des Bankiers. Sehen Sie hier einen von Raymonds humorvollen Posts über Rundungen ...
quelle
// konvertiere bis zu zwei Dezimalstellen
=========
kann auch "0" mit "#" kombinieren.
quelle
Ich weiß, dass es eine alte Frage ist, aber bitte beachten Sie die folgenden Unterschiede zwischen der Math-Runde und der String-Format-Runde :
quelle
Dies dient zum Runden auf 2 Dezimalstellen in C #:
In VB.NET:
quelle
Wenn Sie eine Zahl runden möchten, können Sie unterschiedliche Ergebnisse erzielen, je nachdem: wie Sie die Math.Round () -Funktion verwenden (wenn Sie eine Auf- oder Abrundung durchführen), arbeiten Sie mit doppelten und / oder schwebenden Zahlen und Sie wenden die Mittelpunktsrundung an. Insbesondere bei Verwendung mit darin enthaltenen Operationen oder der zu rundenden Variablen stammt sie aus einer Operation. Angenommen , Sie möchten diese beiden Zahlen multiplizieren: 0,75 * 0,95 = 0,7125 . Recht? Nicht in C #
Mal sehen, was passiert, wenn Sie auf die 3. Dezimalstelle runden möchten:
Wie Sie sehen, ist die erste Runde () korrekt, wenn Sie den Mittelpunkt abrunden möchten. Aber in der zweiten Runde () ist es falsch, wenn Sie aufrunden möchten.
Dies gilt für negative Zahlen:
Also, IMHO, sollten Sie Ihre eigene Wrap-Funktion für Math.Round () erstellen, die Ihren Anforderungen entspricht. Ich habe eine Funktion erstellt, in der der Parameter 'roundUp = true' bedeutet, auf die nächstgrößere Zahl zu runden. Das heißt: 0,7125 Runden auf 0,713 und -0,7125 Runden auf -0,712 (weil -0,712> -0,713). Dies ist die Funktion, die ich erstellt habe und die für eine beliebige Anzahl von Dezimalstellen funktioniert:
Die Variable 'Korrektor' dient dazu, die Ungenauigkeit des Betriebs mit schwebenden oder doppelten Zahlen zu beheben.
quelle
Eine Sache, die Sie überprüfen möchten, ist der Rundungsmechanismus von Math.Round:
http://msdn.microsoft.com/en-us/library/system.midpointrounding.aspx
Abgesehen davon empfehle ich den Math.Round-Ansatz (inputNumer, numberOfPlaces) gegenüber dem * 100/100 -Ansatz, da er sauberer ist.
quelle
Sie sollten in der Lage sein, die Anzahl der Stellen anzugeben, auf die Sie mit Math.Round (YourNumber, 2) runden möchten.
Sie können mehr lesen hier .
quelle
Math.Floor (123456.646 * 100) / 100 würde 123456.64 zurückgeben
quelle
Zeichenfolge a = "10.65678";
dezimal d = Math.Round (Convert.ToDouble (a.ToString ()), 2)
quelle
Hatte eine seltsame Situation, in der ich eine Dezimalvariable hatte. Bei der Serialisierung von 55.50 wird der Standardwert mathematisch immer auf 55.5 gesetzt. Unser Client-System erwartet jedoch aus irgendeinem Grund ernsthaft 55,50 und definitiv Dezimalzahlen. Das war, als ich den folgenden Helfer geschrieben hatte, der immer jeden aufgefüllten Dezimalwert in 2 Ziffern mit Nullen konvertiert, anstatt eine Zeichenfolge zu senden.
Verwendung sollte sein
Ausgabe:
quelle
quelle