Unterschied zwischen Math.Floor() und Math.Truncate()
Frage
Was ist der Unterschied zwischen Math.Floor()
Und Math.Truncate()
in .NET?
Keine korrekte Lösung
Andere Tipps
Math.Floor
rundet ab, Math.Ceiling
rundet auf und Math.Truncate
rundet gegen Null.Daher, Math.Truncate
ist wie Math.Floor
für positive Zahlen und dergleichen Math.Ceiling
für negative Zahlen.Hier ist die Referenz.
Zur Vollständigkeit, Math.Round
rundet auf die nächste ganze Zahl.Wenn die Zahl genau in der Mitte zwischen zwei ganzen Zahlen liegt, wird in Richtung der geraden Zahl gerundet. Referenz.
Siehe auch: Pax Diablos Antwort.Sehr empfehlenswert!
Folgen Sie diesen Links für die MSDN-Beschreibungen von:
Math.Floor
, was in Richtung negativer Unendlichkeit abrundet.Math.Ceiling
, was in Richtung positiver Unendlichkeit aufrundet.Math.Truncate
, was in Richtung Null auf- oder abrundet.Math.Round
, das auf die nächste ganze Zahl oder die angegebene Anzahl von Dezimalstellen rundet.Sie können das Verhalten angeben, wenn zwischen zwei Möglichkeiten genau der gleiche Abstand besteht, z. B. das Runden, sodass die letzte Ziffer gerade ist ("Round(2.5,MidpointRounding.ToEven)
" wird 2) oder so, dass es weiter von Null entfernt ist ("Round(2.5,MidpointRounding.AwayFromZero)
" wird 3).
Das folgende Diagramm und die folgende Tabelle können hilfreich sein:
-3 -2 -1 0 1 2 3
+--|------+---------+----|----+--|------+----|----+-------|-+
a b c d e
a=-2.7 b=-0.5 c=0.3 d=1.5 e=2.8
====== ====== ===== ===== =====
Floor -3 -1 0 1 2
Ceiling -2 0 1 2 3
Truncate -2 0 0 1 2
Round (ToEven) -3 0 0 2 3
Round (AwayFromZero) -3 -1 0 2 3
Beachten Sie, dass Round
ist viel leistungsfähiger als es scheint, einfach weil es auf eine bestimmte Anzahl von Dezimalstellen runden kann.Alle anderen runden immer auf null Dezimalstellen.Zum Beispiel:
n = 3.145;
a = System.Math.Round (n, 2, MidpointRounding.ToEven); // 3.14
b = System.Math.Round (n, 2, MidpointRounding.AwayFromZero); // 3.15
Bei den anderen Funktionen müssen Sie Multiplikations-/Divisionstricks anwenden, um den gleichen Effekt zu erzielen:
c = System.Math.Truncate (n * 100) / 100; // 3.14
d = System.Math.Ceiling (n * 100) / 100; // 3.15
Math.Floor()
rundet in Richtung negative Unendlichkeit
Math.Truncate
rundet auf oder ab in Richtung Null.
Zum Beispiel:
Math.Floor(-3.4) = -4
Math.Truncate(-3.4) = -3
während
Math.Floor(3.4) = 3
Math.Truncate(3.4) = 3
Einige Beispiele:
Round(1.5) = 2
Round(2.5) = 2
Round(1.5, MidpointRounding.AwayFromZero) = 2
Round(2.5, MidpointRounding.AwayFromZero) = 3
Round(1.55, 1) = 1.6
Round(1.65, 1) = 1.6
Round(1.55, 1, MidpointRounding.AwayFromZero) = 1.6
Round(1.65, 1, MidpointRounding.AwayFromZero) = 1.7
Truncate(2.10) = 2
Truncate(2.00) = 2
Truncate(1.90) = 1
Truncate(1.80) = 1
Sie sind funktional äquivalent zu positiven Zahlen.Der Unterschied besteht darin, wie sie mit negativen Zahlen umgehen.
Zum Beispiel:
Math.Floor(2.5) = 2
Math.Truncate(2.5) = 2
Math.Floor(-2.5) = -3
Math.Truncate(-2.5) = -2
MSDN-Links:- Math.Floor-Methode - Math.Truncate-Methode
P.S.Hüten Sie sich vor Math.Round, es ist möglicherweise nicht das, was Sie erwarten.
Um das „Standard“-Rundungsergebnis zu erhalten, verwenden Sie:
float myFloat = 4.5;
Console.WriteLine( Math.Round(myFloat) ); // writes 4
Console.WriteLine( Math.Round(myFloat, 0, MidpointRounding.AwayFromZero) ) //writes 5
Console.WriteLine( myFloat.ToString("F0") ); // writes 5
Math.Floor()
Runden "in Richtung negativer Unendlichkeit" in Einhaltung der Einhaltung IEEE-Standard 754 Sektion 4.
Math.Truncate()
rundet „ auf die nächste ganze Zahl in Richtung Null.“
math.floor()
Gibt die größte Ganzzahl zurück, die kleiner oder gleich der angegebenen Zahl ist.
MSDN system.math.floor
math.truncate()
Berechnet den Integralteil einer Zahl.
MSDN system.math.truncate
Math.Floor(2.56) = 2
Math.Floor(3.22) = 3
Math.Floor(-2.56) = -3
Math.Floor(-3.26) = -4
Math.Truncate(2.56) = 2
Math.Truncate(2.00) = 2
Math.Truncate(1.20) = 1
Math.Truncate(-3.26) = -3
Math.Truncate(-3.96) = -3
Zusätzlich Math.Round()
Math.Round(1.6) = 2
Math.Round(-8.56) = -9
Math.Round(8.16) = 8
Math.Round(8.50) = 8
Math.Round(8.51) = 9
Math.floor
nach links rutschen...
Math.ceil
nach rechts rutschen...
Math.truncate
criiiiss crooooss (Boden/Decke immer Richtung 0)
Math.round
Cha Cha, echt sanft...(zur nächstgelegenen Seite gehen)
Gehen wir an die Arbeit!(⌐□_□)
Nach links... Math.floor
Nehmt es jetzt alle zurück ... --
Diesmal zwei Sprünge... -=2
Alle klatschen in die Hände ✋✋
Wie tief kann man gehen?Kannst du tief runtergehen?Den ganzen Weg bis zum floor
?
if (this == "wrong")
return "i don't wanna be right";
Math.truncate(x)
ist auch das gleiche wie int(x)
.
Indem Sie einen positiven oder negativen Bruch entfernen, bewegen Sie sich immer in Richtung 0.
Math.Floor()
:Gibt die größte Ganzzahl zurück, die kleiner oder gleich der angegebenen Gleitkommazahl mit doppelter Genauigkeit ist.
Math.Round()
:Rundet einen Wert auf die nächste ganze Zahl oder auf die angegebene Anzahl von Nachkommastellen.
Mat.floor()
wird immer abgerundet, d. h. es wird eine KLEINERE Ganzzahl zurückgegeben.Während round()
gibt die NÄCHSTE Ganzzahl zurück