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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top