Diferencia entre Math.Floor() y Math.Truncate()
Pregunta
Cuál es la diferencia entre Math.Floor()
y Math.Truncate()
¿en la red?
No hay solución correcta
Otros consejos
Math.Floor
redondea hacia abajo, Math.Ceiling
redondea, y Math.Truncate
redondea hacia cero.De este modo, Math.Truncate
es como Math.Floor
para números positivos, y como Math.Ceiling
para números negativos.Aquí esta la referencia.
Por completitud, Math.Round
redondea al número entero más cercano.Si el número está exactamente a medio camino entre dos números enteros, entonces se redondea hacia el número par. Referencia.
Ver también: La respuesta de Pax Diablo..¡Muy recomendable!
Siga estos enlaces para obtener descripciones de MSDN de:
Math.Floor
, que se redondea hacia abajo hacia el infinito negativo.Math.Ceiling
, que se redondea hacia el infinito positivo.Math.Truncate
, que se redondea hacia arriba o hacia abajo hacia cero.Math.Round
, que redondea al número entero más cercano o al número especificado de decimales.Puede especificar el comportamiento si es exactamente equidistante entre dos posibilidades, como redondear para que el dígito final sea par ("Round(2.5,MidpointRounding.ToEven)
" convirtiéndose en 2) o de modo que esté más alejado de cero ("Round(2.5,MidpointRounding.AwayFromZero)
" convirtiéndose en 3).
El siguiente diagrama y tabla pueden ayudar:
-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
Tenga en cuenta que Round
es mucho más poderoso de lo que parece, simplemente porque puede redondear a un número específico de decimales.Todos los demás siempre redondean a cero decimales.Por ejemplo:
n = 3.145;
a = System.Math.Round (n, 2, MidpointRounding.ToEven); // 3.14
b = System.Math.Round (n, 2, MidpointRounding.AwayFromZero); // 3.15
Con las otras funciones, debes usar el truco de multiplicar/dividir para lograr el mismo efecto:
c = System.Math.Truncate (n * 100) / 100; // 3.14
d = System.Math.Ceiling (n * 100) / 100; // 3.15
Math.Floor()
se redondea hacia el infinito negativo
Math.Truncate
redondea hacia arriba o hacia abajo hacia cero.
Por ejemplo:
Math.Floor(-3.4) = -4
Math.Truncate(-3.4) = -3
mientras
Math.Floor(3.4) = 3
Math.Truncate(3.4) = 3
Algunos ejemplos:
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
Son funcionalmente equivalentes con números positivos.La diferencia está en cómo manejan los números negativos.
Por ejemplo:
Math.Floor(2.5) = 2
Math.Truncate(2.5) = 2
Math.Floor(-2.5) = -3
Math.Truncate(-2.5) = -2
Enlaces MSDN:- Método Math.Floor - Método Math.Truncate
PDCuidado con Math.Round, puede que no sea lo que esperas.
Para obtener el resultado del redondeo "estándar", utilice:
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()
Ronda "hacia el infinito negativo" en cumplimiento de Estándar IEEE 754 Sección 4.
Math.Truncate()
redondea "al entero más cercano hacia cero".
math.floor()
Devuelve el mayor entero menor o igual que el número especificado.
math.truncate()
Calcula la parte integral de un número.
MSDN sistema.matematicas.truncar
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
Además Matemáticas.Ronda()
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
deslízate hacia la izquierda...
Math.ceil
deslízate hacia la derecha...
Math.truncate
criiiiss crooooss (piso/techo siempre hacia 0)
Math.round
cha cha, muy suave...(ir al lado más cercano)
¡Vamos a trabajar!(⌐□_□)
A la izquierda... Math.floor
Retírenlo ahora todos... --
Dos saltos esta vez... -=2
Todos aplaudan ✋✋
¿Cuan bajo Puedes ir?¿Puedes bajar bajo?Todo el camino hasta el floor
?
if (this == "wrong")
return "i don't wanna be right";
Math.truncate(x)
también es lo mismo que int(x)
.
Al eliminar una fracción positiva o negativa, siempre te diriges hacia 0.
Math.Floor()
:Devuelve el entero más grande menor o igual que el número de punto flotante de doble precisión especificado.
Math.Round()
:Redondea un valor al número entero más cercano o al número especificado de dígitos fraccionarios.
Mat.floor()
siempre se redondeará hacia abajo, es decir, devuelve un entero MENOR.Mientras round()
devolverá el entero MÁS CERCANO