brauchst du das wirklich nach 10 Jahren ungerade? lol
L_Church
1
Warum gibt es nach 10 Jahren ein Kopfgeld? Es gibt bereits viele Antworten. Fehlt mir hier etwas?
Pfütze
3
Dieser Typ hat nur eine Frage gestellt und die Seite seitdem verlassen. Ich denke, das ist alles, was er schon immer wissen wollte ..: D
Nikos
Antworten:
483
Math.Floorrundet ab, Math.Ceilingrundet auf und Math.Truncaterundet gegen Null. Also Math.Truncateist wie Math.Floorfür positive Zahlen und wie Math.Ceilingfür negative Zahlen. Hier ist die Referenz .
Der Vollständigkeit Math.Roundhalber wird auf die nächste Ganzzahl gerundet. Wenn die Zahl genau in der Mitte zwischen zwei ganzen Zahlen liegt, rundet sie auf die gerade Zahl. Referenz.
@Chris, ich schlage vor, Sie korrigieren Ihre Beschreibung von Round. Es gibt zwei Möglichkeiten zum Runden (AwayFromZero und ToEven) und es wird nicht auf die nächste Ganzzahl gerundet, da es auch fraktionierte Rundungen durchführen kann.
Paxdiablo
1
Also nur eine kurze Ergänzung zur ursprünglichen Frage - was ist der Unterschied zwischen Math.Truncate und dem Umwandeln einer Dezimalzahl oder eines Doppels in int? würde es nicht auch nur gegen null runden?
Noam Gal
8
Wann unterscheidet (int)myDoublesich von (int)Math.Truncate(myDouble)?
Mpen
2
Was ist (int) gleich im Matheunterricht?
Lei Yang
386
Folgen Sie diesen Links für die MSDN-Beschreibungen von:
Math.Floor, die in Richtung negative Unendlichkeit abrundet.
Math.Ceiling, was sich in Richtung positive Unendlichkeit aufrundet.
Math.Round, die auf die nächste Ganzzahl oder die angegebene Anzahl von Dezimalstellen rundet. Sie können das Verhalten angeben, wenn es zwischen zwei Möglichkeiten genau gleich weit entfernt ist, z. B. gerundet, damit die letzte Ziffer gerade ist (" Round(2.5,MidpointRounding.ToEven)" 2 wird) oder weiter von Null entfernt ist (" Round(2.5,MidpointRounding.AwayFromZero)" 3 wird).
Das folgende Diagramm und die folgende Tabelle können hilfreich sein:
-3-2-10123+--|------+---------+----|----+--|------+----|----+-------|-+
a b c d e
a=-2.7 b=-0.5 c=0.3 d=1.5 e=2.8===========================Floor-3-1012Ceiling-20123Truncate-20012Round(ToEven)-30023Round(AwayFromZero)-3-1023
Beachten Sie, dass dies Roundviel leistungsfähiger ist, als es scheint, einfach weil es auf eine bestimmte Anzahl von Dezimalstellen gerundet werden 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- / Divisions-Tricks verwenden, um den gleichen Effekt zu erzielen:
c =System.Math.Truncate(n *100)/100;// 3.14
d =System.Math.Ceiling(n *100)/100;// 3.15
Pax, ich denke du hast einen Fehler mit: Round (AwayFromZero) -3 -2 1 2 3 Math.Round (-1.2, MidpointRounding.AwayFromZero) == -1 Math.Round (0.3, MidpointRounding.AwayFromZero) == 0.0 etc ..
dtroy
1
Danke, @dtroy, ich hatte nie die Notwendigkeit, diesen Modus zu verwenden, und obwohl ich ihn korrekt dokumentiert habe, wenn der Text, habe ich die Beispiele völlig falsch verstanden. Hoffentlich ist das jetzt behoben.
Paxdiablo
Es tut mir leid, eine so alte Frage zu kommentieren, aber ich muss fragen: Wie kann man "ToEven" auf zwei Dezimalstellen runden? Sicherlich seltsam und gerade nur für ganze Zahlen?
Richiban
4
@Richiban, stellen Sie sich eveneine Eigenschaft der letzten Ziffer in der gerundeten Zahl vor, nicht, dass die gesamte Zahl ein Vielfaches von zwei sein muss. Übrigens, tut mir leid, es hat so lange
gedauert,
62
Math.Floor() Runden in Richtung negative Unendlichkeit
Math.floorSliiiide nach links ... Math.ceilSliiiide nach rechts ... Math.truncateCriiiiss Crooooss (Boden / Decke immer in Richtung 0) Math.round cha cha, echt glatt ... (zur nächsten Seite gehen)
Gehen wir an die Arbeit! (⌐ □ _ □)
Links ... Math.floor
Nimm es jetzt zurück, ihr alle ... --
Diesmal zwei Sprünge ...-=2
Alle klatschen in die Hände ✋✋
Wie tief kann man gehen? Kannst du tief runter gehen? Den ganzen Weg zum floor?
if(this=="wrong")return"i don't wanna be right";
Math.truncate(x)ist auch das gleiche wie int(x).
Wenn Sie einen positiven oder negativen Bruch entfernen, bewegen Sie sich immer in Richtung 0.
Antworten:
Math.Floor
rundet ab,Math.Ceiling
rundet auf undMath.Truncate
rundet gegen Null. AlsoMath.Truncate
ist wieMath.Floor
für positive Zahlen und wieMath.Ceiling
für negative Zahlen. Hier ist die Referenz .Der Vollständigkeit
Math.Round
halber wird auf die nächste Ganzzahl gerundet. Wenn die Zahl genau in der Mitte zwischen zwei ganzen Zahlen liegt, rundet sie auf die gerade Zahl. Referenz.Siehe auch: Pax Diablos Antwort . Sehr empfehlenswert!
quelle
(int)myDouble
sich von(int)Math.Truncate(myDouble)
?Folgen Sie diesen Links für die MSDN-Beschreibungen von:
Math.Floor
, die in Richtung negative Unendlichkeit abrundet.Math.Ceiling
, was sich in Richtung positive Unendlichkeit aufrundet.Math.Truncate
, die gegen Null auf- oder abrundet.Math.Round
, die auf die nächste Ganzzahl oder die angegebene Anzahl von Dezimalstellen rundet. Sie können das Verhalten angeben, wenn es zwischen zwei Möglichkeiten genau gleich weit entfernt ist, z. B. gerundet, damit die letzte Ziffer gerade ist ("Round(2.5,MidpointRounding.ToEven)
" 2 wird) oder weiter von Null entfernt ist ("Round(2.5,MidpointRounding.AwayFromZero)
" 3 wird).Das folgende Diagramm und die folgende Tabelle können hilfreich sein:
Beachten Sie, dass dies
Round
viel leistungsfähiger ist, als es scheint, einfach weil es auf eine bestimmte Anzahl von Dezimalstellen gerundet werden kann. Alle anderen runden immer auf null Dezimalstellen. Zum Beispiel:Bei den anderen Funktionen müssen Sie Multiplikations- / Divisions-Tricks verwenden, um den gleichen Effekt zu erzielen:
quelle
even
eine Eigenschaft der letzten Ziffer in der gerundeten Zahl vor, nicht, dass die gesamte Zahl ein Vielfaches von zwei sein muss. Übrigens, tut mir leid, es hat so langeMath.Floor()
Runden in Richtung negative UnendlichkeitMath.Truncate
rundet auf oder ab gegen Null.Zum Beispiel:
während
quelle
Einige Beispiele:
quelle
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)Gehen wir an die Arbeit! (⌐ □ _ □)
Links ...
Math.floor
Nimm es jetzt zurück, ihr alle ...
--
Diesmal zwei Sprünge ...
-=2
Alle klatschen in die Hände ✋✋
Wie tief kann man gehen? Kannst du tief runter gehen? Den ganzen Weg zum
floor
?Math.truncate(x)
ist auch das gleiche wieint(x)
.Wenn Sie einen positiven oder negativen Bruch entfernen, bewegen Sie sich immer in Richtung 0.
quelle
Sie sind funktional äquivalent zu positiven Zahlen. Der Unterschied besteht darin, wie sie mit negativen Zahlen umgehen.
Zum Beispiel:
MSDN-Links: - Math.Floor-Methode - Math.Truncate-Methode
PS Vorsicht vor Mathe. Runde ist möglicherweise nicht das, was Sie erwarten.
Um das "Standard" -Rundungsergebnis zu erhalten, verwenden Sie:
quelle
Versuchen Sie dies, Beispiele:
Math.Floor () vs Math.Truncate ()
Auch Math.Round ()
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 integralen Teil einer Zahl. MSDN system.math.truncate
quelle
Math.Floor()
Runden "in Richtung negative Unendlichkeit" gemäß IEEE Standard 754 Abschnitt 4.Math.Truncate()
rundet "auf die nächste ganze Zahl gegen Null".quelle
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 Ganzzahl oder auf die angegebene Anzahl von Bruchstellen.quelle
Floor()
undTruncate()
, nichtFloor()
undRound()
.Math.floor()
wird immer abrunden, dh es wird WENIGER Ganzzahl zurückgegeben. Whileround()
gibt die NEAREST-Ganzzahl zurückmath.floor ()
Gibt die größte Ganzzahl zurück, die kleiner oder gleich der angegebenen Zahl ist.
math.truncate ()
Berechnet den integralen Teil einer Zahl.
quelle
Beim Abschneiden wird die Dezimalstelle **** gelöscht
quelle