Differenza tra Math.Floor() e Math.Truncate()
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.
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