Grundsätzlich geben Sie der Math.RoundMethode drei Parameter.
Der Wert, den Sie runden möchten.
Die Anzahl der Dezimalstellen, die nach dem Wert beibehalten werden sollen.
Ein optionaler Parameter, den Sie aufrufen können, um die AwayFromZero-Rundung zu verwenden. (wird ignoriert, es sei denn, die Rundung ist nicht eindeutig, z. B. 1,5 )
Sie benötigen, MidpointRounding.AwayFromZerowenn ein Wert von 0,5 aufgerundet werden soll. Leider ist dies nicht das Standardverhalten für Math.Round(). Bei Verwendung MidpointRounding.ToEven(Standardeinstellung) wird der Wert auf die nächste gerade Zahl 1.5gerundet ( wird gerundet 2, aber 2.5auch gerundet 2).
Es sieht immer noch verdächtig aus. Zunächst fragt die Frage nach Rundung nach oben und zweitens, wenn ich es habe gerade versucht nun, die Standardimplementierung von Math.Round (1.5) Runden 2. So dies nicht sein kann , was er wollte.
Ver
In Ihrem Beispiel wird außerdem Dezimalpunkt mit Dezimalkomma gemischt. Welches verwenden Sie normalerweise (in Schweden, denke ich)? :)
ver
oops ... oh yeah, sorry. Natürlich beim Programmieren des Dezimalpunkts, aber im formalen Text verwenden wir das Dezimalkomma. und ja, schweden ^^ über die frage und den "abrundungsteil": ich denke das ist nur ein sprachfehler. In den Beispielen von op runden einige Dezimalzahlen ab.
Davogotland
@ver ich runde nicht mit Math.Round ab, ich mache es mit einer Besetzung. Deshalb ist dieser Weg manuell und irgendwie süß;)
Davogotland
5
Sie können Math.Round verwenden, wie andere vorgeschlagen haben (empfohlen), oder Sie können 0,5 hinzufügen und in ein int umwandeln (wodurch der Dezimalteil gelöscht wird).
Ich habe danach gesucht, aber mein Beispiel war, eine Zahl wie 4.2769 zu nehmen und sie in einer Zeitspanne von nur 4,3 fallen zu lassen. Nicht genau das gleiche, aber wenn das hilft:
Model.Statistics.AverageReview<= it's just a double from the model
Dann:
@Model.Statistics.AverageReview.ToString("n1")<=gives me 4.3@Model.Statistics.AverageReview.ToString("n2")<=gives me 4.28
Ich verwende diese Methode, weil ich auch einen String benötige und .ToString ("n0") für mich die Rundung übernimmt: 1.5m.ToString ("n0") // gibt "2" zurück
Antworten:
Weitere Informationen finden Sie in der offiziellen Dokumentation . Beispielsweise:
Grundsätzlich geben Sie der
Math.Round
Methode drei Parameter.Beispielcode:
Live-Demo
Sie benötigen,
MidpointRounding.AwayFromZero
wenn ein Wert von 0,5 aufgerundet werden soll. Leider ist dies nicht das Standardverhalten fürMath.Round()
. Bei VerwendungMidpointRounding.ToEven
(Standardeinstellung) wird der Wert auf die nächste gerade Zahl1.5
gerundet ( wird gerundet2
, aber2.5
auch gerundet2
).quelle
away from zero
bedeutet Verwenden auch, dass-1.5
sich auf runden wird-2
.immer aufgerundet (zur Decke hin)
rundet immer ab (in Richtung Boden)
Was Sie suchen, ist einfach
welche Runden gemäß diesem Beitrag
quelle
Du brauchst
Math.Round
nichtMath.Ceiling
.Ceiling
"rundet" immer auf, währendRound
je nach Wert nach dem Dezimalpunkt auf- oder abgerundet wird.quelle
Es gibt dieses Handbuch und irgendwie auch eine nette Art:
Addiere einfach 0,5 zu einer beliebigen Zahl und wirf sie auf int (oder boden sie) und es wird mathematisch korrekt gerundet: D.
quelle
Sie können Math.Round verwenden, wie andere vorgeschlagen haben (empfohlen), oder Sie können 0,5 hinzufügen und in ein int umwandeln (wodurch der Dezimalteil gelöscht wird).
quelle
Nur eine Erinnerung. Vorsicht vor Doppel.
quelle
Sie haben die Math.Round-Funktion, die genau das tut, was Sie wollen.
quelle
1.5
dem Wert? Sie benötigen mehr Parameter.Dies wird auf die nächste 5 aufgerundet oder ändert sich nicht, wenn es bereits durch 5 teilbar ist
quelle
Ich habe danach gesucht, aber mein Beispiel war, eine Zahl wie 4.2769 zu nehmen und sie in einer Zeitspanne von nur 4,3 fallen zu lassen. Nicht genau das gleiche, aber wenn das hilft:
Dann:
etc...
quelle
Verwendung
Math.Round
:quelle
Es wird Ergebnis geben:
quelle
Wenn Sie eher mit Ganzzahlen als mit Gleitkommazahlen arbeiten, ist dies der richtige Weg.
Hier sind sowohl "numr" als auch "denr" vorzeichenlose ganze Zahlen.
quelle
Verwenden Sie
Math.Round(number)
Runden auf die nächste ganze Zahl.quelle
Schreiben Sie Ihre eigene runde Methode. Etwas wie,
function round(x) rx = Math.ceil(x) if (rx - x <= .000001) return int(rx) else return int(x) end
quelle
quelle