Różnica pomiędzy math.floor () i Math.Truncate ()

głosy
363

Jaka jest różnica między Math.Floor()i Math.Truncate()w .NET?

Utwórz 01/08/2008 o 01:59
źródło użytkownik
W innych językach...                            


10 odpowiedzi

głosy
429

Math.Floorzaokrągla w dół, Math.Ceilingzaokrągla w górę, a Math.Truncaterundy kierunku zera. Tak więc, Math.Truncatejest jak Math.Floordla liczb dodatnich, jak i Math.Ceilingdla liczb ujemnych. Oto odniesienia .

Dla kompletności, Math.Roundzaokrągla do najbliższej liczby całkowitej. Jeśli numer jest dokładnie w połowie drogi między dwiema liczbami całkowitymi, to zaokrągla kierunku jeszcze jeden. Odniesienie.

Patrz również: odpowiedź PAX Diablo . Wysoce polecany!

Odpowiedział 01/08/2008 o 13:26
źródło użytkownik

głosy
349

Poniższe linki do opisów MSDN:

  • Math.Floor, Który uzupełnia w kierunku ujemnym w nieskończoność.
  • Math.Ceiling, Które zaokrągla się w kierunku dodatnim nieskończoności.
  • Math.Truncate, Które zaokrągla się w dół lub do zera.
  • Math.Round, Która zaokrągla do najbliższej liczby całkowitej lub określonej liczby miejsc po przecinku. Można określić zachowanie, czy to dokładnie w równej odległości między dwoma możliwościami, takimi jak zaokrąglanie tak, że końcowa cyfra jest nawet ( „ Round(2.5,MidpointRounding.ToEven)«stając 2) lub tak, że jest dalej od zera (» Round(2.5,MidpointRounding.AwayFromZero)” stając 3).

Poniższy schemat i tabela może pomóc:

-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

Zauważ, że Roundjest o wiele bardziej wydajne, niż się wydaje, po prostu dlatego, że może zaokrąglić do określonej liczby miejsc po przecinku. Wszyscy inni zaokrąglić do zera po przecinku zawsze. Na przykład:

n = 3.145;
a = System.Math.Round (n, 2, MidpointRounding.ToEven);       // 3.14
b = System.Math.Round (n, 2, MidpointRounding.AwayFromZero); // 3.15

Z innych funkcji, trzeba użyć mnożenia / dzielenia sztuczek, aby osiągnąć ten sam efekt:

c = System.Math.Truncate (n * 100) / 100;                    // 3.14
d = System.Math.Ceiling (n * 100) / 100;                     // 3.15
Odpowiedział 24/02/2009 o 03:39
źródło użytkownik

głosy
41

Math.Floor() Rundy w kierunku ujemnym nieskończoności

Math.Truncate zaokrągla w górę lub w dół, w kierunku zera.

Na przykład:

Math.Floor(-3.4)     = -4
Math.Truncate(-3.4)  = -3

podczas

Math.Floor(3.4)     = 3
Math.Truncate(3.4)  = 3
Odpowiedział 19/07/2011 o 04:56
źródło użytkownik

głosy
37

Kilka przykładów:

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
Odpowiedział 05/08/2008 o 12:01
źródło użytkownik

głosy
19

Są one funkcjonalnie równoważne z liczbami dodatnimi. Różnica polega na tym, w jaki sposób poradzić sobie z liczb ujemnych.

Na przykład:

Math.Floor(2.5) = 2
Math.Truncate(2.5) = 2

Math.Floor(-2.5) = -3
Math.Truncate(-2.5) = -2

Linki MSDN: - Math.floor Method - Metoda Math.Truncate

PS Uważaj Math.round to nie może być to, czego oczekują.

Aby uzyskać „standard” zaokrąglania wykorzystanie wyników:

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
Odpowiedział 02/01/2015 o 13:09
źródło użytkownik

głosy
18

Math.Floor()Rundy „w kierunku minus nieskończoności do” zgodnie ze standardem IEEE 754 części 4.

Math.Truncate() rund „do najbliższej liczby całkowitej w kierunku zera.”

Odpowiedział 07/06/2012 o 19:15
źródło użytkownik

głosy
12

math.floor()

Zwraca największą liczbę całkowitą mniejszą lub równą podanej liczbie.

MSDN system.math.floor

math.truncate()

Oblicza integralną część numeru.

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

Ponadto 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
Odpowiedział 12/02/2016 o 09:12
źródło użytkownik

głosy
11

Math.Floor(): Zwraca największą liczbę całkowitą mniejszą lub równą podanej liczby zmiennoprzecinkowej podwójnej precyzji.

Math.Round(): Zaokrągla wartość do najbliższej liczby całkowitej lub do określonej liczby cyfr ułamkowych.

Odpowiedział 19/09/2013 o 12:44
źródło użytkownik

głosy
6

Math.floorsliiiide w lewo ...
Math.ceilsliiiide w prawo ...
Math.truncatecriiiiss crooooss (podłoga / ceil zawsze w kierunku 0)
Math.roundCha, prawdziwy gładkie ... (przejdź do najbliższego boku)

Chodźmy do pracy! (⌐ □ _ □)

W lewo ... Math.floor
Weź go teraz y'all ... --
Dwa chmielu tym razem ...-=2

Wszyscy klaszczą ręce ✋✋

Jak nisko można przejść? Można zejść nisko? Przez całą drogę do floor?

if (this == "wrong")
    return "i don't wanna be right";

Math.truncate(x)jest również taki sam jak int(x).
poprzez usunięcie ułamek dodatni lub ujemny, jesteś zawsze w kierunku 0.

Odpowiedział 11/02/2018 o 15:03
źródło użytkownik

głosy
1

Mat.floor () zawsze będzie zaokrąglić w dół tzn. Zwraca LESSER całkowitą. Podczas gdy okrągłe () powróci do najbliższej liczby całkowitej

Odpowiedział 17/07/2018 o 07:14
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more