Wie kann ich Werte auf die nächste Ganzzahl runden?
Beispielsweise:
1.1 => 1
1.5 => 2
1.9 => 2
"Math.Ceiling ()" hilft mir nicht. Irgendwelche Ideen?
Wie kann ich Werte auf die nächste Ganzzahl runden?
Beispielsweise:
1.1 => 1
1.5 => 2
1.9 => 2
"Math.Ceiling ()" hilft mir nicht. Irgendwelche Ideen?
Antworten:
Weitere Informationen finden Sie in der offiziellen Dokumentation . Beispielsweise:
Grundsätzlich geben Sie der Math.Round
Methode drei Parameter.
Beispielcode:
var roundedA = Math.Round(1.1, 0); // Output: 1
var roundedB = Math.Round(1.5, 0, MidpointRounding.AwayFromZero); // Output: 2
var roundedC = Math.Round(1.9, 0); // Output: 2
var roundedD = Math.Round(2.5, 0); // Output: 2
var roundedE = Math.Round(2.5, 0, MidpointRounding.AwayFromZero); // Output: 3
var roundedF = Math.Round(3.49, 0, MidpointRounding.AwayFromZero); // Output: 3
Sie benötigen, MidpointRounding.AwayFromZero
wenn 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.5
gerundet ( wird gerundet 2
, aber 2.5
auch gerundet 2
).
away from zero
bedeutet Verwenden auch, dass -1.5
sich auf runden wird -2
.
Math.Ceiling
immer aufgerundet (zur Decke hin)
Math.Floor
rundet immer ab (in Richtung Boden)
Was Sie suchen, ist einfach
Math.Round
welche Runden gemäß diesem Beitrag
Du brauchst Math.Round
nicht Math.Ceiling
. Ceiling
"rundet" immer auf, während Round
je nach Wert nach dem Dezimalpunkt auf- oder abgerundet wird.
Es gibt dieses Handbuch und irgendwie auch eine nette Art:
double d1 = 1.1;
double d2 = 1.5;
double d3 = 1.9;
int i1 = (int)(d1 + 0.5);
int i2 = (int)(d2 + 0.5);
int i3 = (int)(d3 + 0.5);
Addiere einfach 0,5 zu einer beliebigen Zahl und wirf sie auf int (oder boden sie) und es wird mathematisch korrekt gerundet: D.
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).
double value = 1.1;
int roundedValue = (int)(value + 0.5); // equals 1
double value2 = 1.5;
int roundedValue2 = (int)(value2 + 0.5); // equals 2
Sie haben die Math.Round-Funktion, die genau das tut, was Sie wollen.
Math.Round(1.1) results with 1
Math.Round(1.8) will result with 2.... and so one.
1.5
dem Wert? Sie benötigen mehr Parameter.
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
etc...
Verwendung Math.Round
:
double roundedValue = Math.Round(value, 0)
var roundedVal = Math.Round(2.5, 0);
Es wird Ergebnis geben:
var roundedVal = 3
Wenn Sie eher mit Ganzzahlen als mit Gleitkommazahlen arbeiten, ist dies der richtige Weg.
#define ROUNDED_FRACTION(numr,denr) ((numr/denr)+(((numr%denr)<(denr/2))?0:1))
Hier sind sowohl "numr" als auch "denr" vorzeichenlose ganze Zahlen.
Verwenden Sie Math.Round(number)
Runden auf die nächste ganze Zahl.
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