Was ist der Unterschied zwischen Math.Floor()
und in .NET?Unterschied zwischen Math.Floor() und Math.Truncate()
Antwort
Math.Floor
rundet ab, Math.Ceiling
rundet auf, und Math.Truncate
rundet auf Null ab. So ist Math.Truncate
wie Math.Floor
für positive Zahlen und wie Math.Ceiling
für negative Zahlen. Hier ist die reference.
Der Vollständigkeit halber wird Math.Round
auf die nächste Ganzzahl gerundet. Wenn die Zahl genau in der Mitte zwischen zwei ganzen Zahlen liegt, dann wird auf die gerade Zahl gerundet. Reference.
Siehe auch: Pax Diablo's answer. Sehr empfehlenswert!
@Chris, ich schlage vor, dass Sie Ihre Beschreibung von Runde korrigieren, es gibt zwei Möglichkeiten zum Runden (AwayFromZero und ToEven) und es wird nicht auf die nächste * Ganzzahl * gerundet, da es auch eine Teilrundung ausführen kann. – paxdiablo
Also nur eine kurze Ergänzung zu der ursprünglichen Frage - Was ist der Unterschied zwischen Math.Truncate und nur eine Dezimal oder Doppel zu int zu werfen? würde es nicht auch gleich gegen Null gehen? –
Wann unterscheidet sich '(int) myDouble' von' (int) Math.Truncate (myDouble) '? – mpen
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
Führen Sie die folgenden Links für die MSDN-Beschreibungen:
Math.Floor
, die nach unten in Richtung der negativen Unendlichkeit rundet.Math.Ceiling
, die rundet auf positive Unendlichkeit.Math.Truncate
, die auf Null oder auf rund abrundet.Math.Round
, die auf die nächste Ganzzahl oder die angegebene Anzahl von Dezimalstellen rundet. Sie können das Verhalten angeben, wenn es genau zwischen zwei Möglichkeiten äquidistant ist, z. B. Runden, so dass die letzte Ziffer gerade ist ("Round(2.5,MidpointRounding.ToEven)
" wird 2) oder es ist weiter von Null entfernt ("Round(2.5,MidpointRounding.AwayFromZero)
" wird 3).
Das folgende Diagramm und Tabelle kann helfen:
-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
viel stärker ist, als es scheint, einfach weil es auf eine bestimmte Anzahl von Dezimalstellen abzurunden können. 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/Divisions-Tricks verwenden, um die gleiche Wirkung zu erzielen:
c = System.Math.Truncate (n * 100)/100; // 3.14
d = System.Math.Ceiling (n * 100)/100; // 3.15
Pax, ich glaube du hast einen Fehler mit: Runde (AwayFromZero) -3 -2 1 2 3 Math.Round (-1.2, MittelpunktRounding.AwayFromZero) == -1 Math.Round (0.3, MidpointRounding .AwayFromZero) == 0.0 etc .. – dtroy
Danke, @dtroy, ich hatte nie eine Notwendigkeit, diesen Modus zu verwenden, und während ich es richtig dokumentierte, wenn der Text, habe ich völlig die Beispiele falsch. Hoffentlich ist das jetzt behoben. – paxdiablo
Entschuldigen Sie die Frage zu einer so alten Frage, aber ich muss fragen: Wie können Sie "ToEven" auf zwei Dezimalstellen runden? Sicher ungerade und sogar nur für ganze Zahlen gelten? – Richiban
Math.Floor()
Runden gegen minus unendlich
Math.Truncate
Runden nach oben oder unten gegen 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
Math.Floor()
Runden "in Richtung negativ unendlich" in Übereinstimmung zu IEEE Standard 754 Abschnitt 4.
Math.Truncate()
Runde "auf die nächste ganze Zahl auf Null ."
Math.Floor()
: Liefert die größte ganze Zahl kleiner als oder gleich dem angegebenen doppelter Genauigkeit Gleitkommazahl
Math.Round()
. A. Wert auf die nächste ganze Zahl Runden oder auf die angegebene Anzahl der Nachkommastellen
Das OP fragte nach dem Unterschied zwischen 'Floor()' und 'Truncate()', nicht 'Floor()' und 'Round()'. –
sie sind funktionell gleichwertig mit positiven Zahlen Der Unterschied in der ist, wie sie negative Zahlen verarbeiten
. 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 Method - Math.Truncate Method
P. S. Vorsicht vor Mathe. Es ist vielleicht nicht das, was Sie erwarten.
Um den "Standard" Rundungsergebnis Verwendung zu erhalten:
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()
Gibt die größte ganze Zahl kleiner oder gleich der angegebenen Zahl.
MSDN system.math.floor
math.truncate()
Berechnet den integralen Bestandteil 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
sliiiide nach links ...
Math.ceil
sliiiide nach rechts ...
Math.truncate
criiiiss crooooss (Boden/Decke immer in Richtung 0)
Math.round
cha cha, echt glatt ... (zur nächsten Seite gehen)
Los geht's zur Arbeit! (⌐ □ _ □)
Auf der linken Seite ... Math.floor
es jetzt Rücknahme- y'all ... --
Zwei Hopfen diesmal ... -=2
Jeder Hände klatschen ✋✋
Wie niedrig können Sie gehen? Kannst du runter gehen? Den ganzen Weg bis zur floor
?
if (this == "wrong")
return "i don't wanna be right";
Math.truncate(x)
ist auch die gleiche wie int(x)
.
durch Entfernen einer positiven oder negativen Fraktion, gehen Sie immer in Richtung 0.
z.B. Math.Floor (5.4) = 5 Math.Truncate (5.4) = 5 – subramani
Sie brauchen das wirklich nach 10 Jahren? lol –
Warum gibt es nach 10 Jahren eine Prämie? Es gibt bereits viele Antworten. Gibt es etwas, das mir hier fehlt? – Puddle