Rozdíl mezi Math.Floor () a Math.Truncate ()

hlasů
363

Jaký je rozdíl mezi Math.Floor()a Math.Truncate()v .NET?

Položena 01/08/2008 v 01:59
zdroj uživatelem
V jiných jazycích...                            


10 odpovědí

hlasů
429

Math.Floorzaokrouhluje dolů, Math.Ceilingzaokrouhlí nahoru, a Math.Truncatekola směrem k nule. Tak Math.Truncateje jako Math.Floorpro kladná čísla, a podobně Math.Ceilingpro záporná čísla. Tady je odkaz .

Pro úplnost, Math.Roundzaokrouhlí na nejbližší celé číslo. V případě, že číslo je přesně uprostřed mezi dvěma celými čísly, pak se zaokrouhlí směrem k ještě jeden. Odkaz.

Viz také: Pax Diablo je odpověď . Vysoce doporučeno!

Odpovězeno 01/08/2008 v 13:26
zdroj uživatelem

hlasů
349

Na následujících odkazech na popisy MSDN:

  • Math.Floor, Který zaokrouhlí dolů na mínus nekonečno.
  • Math.Ceiling, Který kola směrem k plus nekonečno.
  • Math.Truncate, Který zaokrouhlené nahoru nebo dolů, směrem k nule.
  • Math.Round, Která zaokrouhlí na nejbližší celé číslo nebo zadaný počet desetinných míst. Můžete určit chování, pokud je to přesně ve stejné vzdálenosti mezi dvěma možnostmi, jako je zaokrouhlování, takže poslední číslice je dokonce ( „ Round(2.5,MidpointRounding.ToEven)‚stávat 2), nebo tak, že je to dál od nuly (‘ Round(2.5,MidpointRounding.AwayFromZero)“ stávat 3).

Následující graf a tabulka může pomoci:

-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

Všimněte si, že Roundje mnohem silnější, než se zdá, prostě proto, že to může zaokrouhlit na určitý počet desetinných míst. Všichni ostatní zaokrouhlit na nulu desetinných míst vždy. Například:

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

S dalšími funkcemi, budete muset použít násobení / dělení podvod k dosažení stejného účinku:

c = System.Math.Truncate (n * 100) / 100;                    // 3.14
d = System.Math.Ceiling (n * 100) / 100;                     // 3.15
Odpovězeno 24/02/2009 v 03:39
zdroj uživatelem

hlasů
41

Math.Floor() kola směrem k mínus nekonečno

Math.Truncate zaokrouhluje nahoru nebo dolů směrem k nule.

Například:

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

zatímco

Math.Floor(3.4)     = 3
Math.Truncate(3.4)  = 3
Odpovězeno 19/07/2011 v 04:56
zdroj uživatelem

hlasů
37

Nějaké příklady:

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
Odpovězeno 05/08/2008 v 12:01
zdroj uživatelem

hlasů
19

Jsou funkčně ekvivalentní s kladná čísla. Rozdíl je v tom, jak zacházet s záporná čísla.

Například:

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

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

Odkazy MSDN: - Math.Floor Method - Math.Truncate Method

PS Pozor na Math.round to nemusí být to, co očekáváte.

Chcete-li získat „standardní“ zaokrouhlování využití výsledků:

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
Odpovězeno 02/01/2015 v 13:09
zdroj uživatelem

hlasů
18

Math.Floor()ran „směrem k mínus nekonečno“, v souladu s normou IEEE 754. bodu 4.

Math.Truncate() ran „na nejbližší celé číslo k nule.“

Odpovězeno 07/06/2012 v 19:15
zdroj uživatelem

hlasů
12

math.floor()

Vrátí největší celé číslo menší nebo roven zadané číslo.

MSDN system.math.floor

math.truncate()

Vypočítá nedílnou součástí čísla.

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

Kromě 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
Odpovězeno 12/02/2016 v 09:12
zdroj uživatelem

hlasů
11

Math.Floor(): Vrací největší celé číslo menší nebo rovno specifikované dvojitou přesností číslo s plovoucí čárkou.

Math.Round(): Zaokrouhlí hodnotu na nejbližší celé číslo nebo na určený počet desetinných míst.

Odpovězeno 19/09/2013 v 12:44
zdroj uživatelem

hlasů
6

Math.floorsliiiide doleva ...
Math.ceilsliiiide doprava ...
Math.truncatecriiiiss crooooss (podlaha / ceil vždy k 0)
Math.roundcha cha, real hladký ... (přejít na nejbližší straně)

Pojďme do práce! (⌐ □ _ □)

Na levé straně ... Math.floor
Vezměte ho zpátky teď vám všem ... --
Dvě chmele tentokrát ...-=2

Každý tleskněte ✋✋

Jak hluboko můžeš klesnout? Můžete jít dolů nízká? Celou cestu k floor?

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

Math.truncate(x)je také stejná jako int(x).
odstraněním pozitivní nebo negativní frakci, jste vždy směřují k 0 ° C.

Odpovězeno 11/02/2018 v 15:03
zdroj uživatelem

hlasů
1

Mat.floor () bude vždy zaokrouhlit dolů IE., Vrátí se v menší číslo. Zatímco kolo () vrátí na nejbližší celé číslo

Odpovězeno 17/07/2018 v 07:14
zdroj uživatelem

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