Domanda

Qual è la differenza tra Math.Floor() E Math.Truncate() in .NET?

Nessuna soluzione corretta

Altri suggerimenti

Math.Floor arrotonda per difetto, Math.Ceiling arrotonda, e Math.Truncate arrotonda verso lo zero.Così, Math.Truncate è come Math.Floor per numeri positivi e simili Math.Ceiling per i numeri negativi.Ecco il riferimento.

Per completezza, Math.Round arrotonda all'intero più vicino.Se il numero è esattamente a metà strada tra due numeri interi, verrà arrotondato al numero pari. Riferimento.

Guarda anche: La risposta di Pax Diablo.Altamente raccomandato!

Segui questi collegamenti per le descrizioni MSDN di:

  • Math.Floor, che arrotonda per difetto verso l'infinito negativo.
  • Math.Ceiling, che arrotonda verso l'infinito positivo.
  • Math.Truncate, che arrotonda per eccesso o per difetto verso lo zero.
  • Math.Round, che arrotonda al numero intero più vicino o al numero specificato di cifre decimali.È possibile specificare il comportamento se è esattamente equidistante tra due possibilità, ad esempio arrotondando in modo che la cifra finale sia pari ("Round(2.5,MidpointRounding.ToEven)" che diventa 2) o qualcosa di più lontano da zero ("Round(2.5,MidpointRounding.AwayFromZero)"divenendo 3).

Il diagramma e la tabella seguenti possono aiutare:

-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

Notare che Round è molto più potente di quanto sembri, semplicemente perché può arrotondare a un numero specifico di cifre decimali.Tutti gli altri arrotondano sempre a zero decimali.Per esempio:

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

Con le altre funzioni, devi usare il trucco di moltiplicazione/divisione per ottenere lo stesso effetto:

c = System.Math.Truncate (n * 100) / 100;                    // 3.14
d = System.Math.Ceiling (n * 100) / 100;                     // 3.15

Math.Floor() arrotonda verso l'infinito negativo

Math.Truncate arrotonda per eccesso o per difetto verso lo zero.

Per esempio:

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

Mentre

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

Qualche esempio:

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

Sono funzionalmente equivalenti ai numeri positivi.La differenza sta nel modo in cui gestiscono i numeri negativi.

Per esempio:

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

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

Collegamenti MSDN:- Metodo Math.Floor - Metodo matematico.Troncare

PSAttenzione a Math.Round potrebbe non essere quello che ti aspetti.

Per ottenere il risultato dell'arrotondamento "standard" utilizzare:

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() Rounds "verso l'infinito negativo" in conformità a Norma IEEE 754 sezione 4.

Math.Truncate() arrotonda " all'intero più vicino verso lo zero."

math.floor()

Restituisce il numero intero più grande minore o uguale al numero specificato.

MSDN sistema.piano.matematico

math.truncate()

Calcola la parte integrale di un numero.

MSDN system.math.troncare

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

Inoltre Turno matematico()

   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 scivola verso sinistra...
Math.ceil scivola verso destra...
Math.truncate criiiiss croooooss (pavimento/soffitto sempre verso 0)
Math.round cha cha, davvero liscio...(vai al lato più vicino)

Andiamo a lavorare!(⌐□_□)

A sinistra... Math.floor
Riprendetelo adesso, voi tutti... --
Due salti questa volta... -=2

Battete tutti le mani ✋✋

Quanto in basso si può andare?Puoi scendere in basso?Fino al floor?

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

Math.truncate(x) è anche lo stesso di int(x).
rimuovendo una frazione positiva o negativa si va sempre verso lo 0.

Math.Floor():Restituisce il numero intero più grande inferiore o uguale al numero a virgola mobile a precisione doppia specificato.

Math.Round():Arrotonda un valore all'intero più vicino o al numero specificato di cifre frazionarie.

Mat.floor() arrotonderà sempre per difetto, ovvero restituirà il numero intero MINORE.Mentre round() restituirà il numero intero PIÙ VICINO

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top