MidpointRounding Enumeración
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Especifica la estrategia que los métodos de redondeo matemáticos deben usar para redondear un número.
public enum class MidpointRounding
public enum MidpointRounding
[System.Runtime.InteropServices.ComVisible(true)]
public enum MidpointRounding
type MidpointRounding =
[<System.Runtime.InteropServices.ComVisible(true)>]
type MidpointRounding =
Public Enum MidpointRounding
- Herencia
- Atributos
Campos
| Nombre | Valor | Description |
|---|---|---|
| ToEven | 0 | Estrategia de redondeo al número más cercano. Cuando un número está a mitad de camino entre dos otros, se redondea hacia el número par más cercano. Los valores que no son de punto medio no se ven afectados por esta opción y se redondean al valor representable más cercano. También conocido como redondeo bancario. |
| AwayFromZero | 1 | Estrategia de redondeo al número más cercano. Cuando un número está a mitad de camino entre dos otros, se redondea hacia el número más cercano que está lejos de cero. Los valores que no son de punto medio no se ven afectados por esta opción y se redondean al valor representable más cercano. |
| ToZero | 2 | La estrategia de redondeo dirigido hacia cero, donde todos los valores ,no solo los puntos intermedios, se redondean hacia cero. El resultado es el valor más cercano a y no mayor en magnitud que el resultado infinitomente preciso. Al redondear a cero dígitos, esto equivale a truncamiento; al redondear a un número distinto de cero de dígitos, se trunca hacia cero en la precisión especificada. |
| ToNegativeInfinity | 3 | La estrategia de redondeo dirigido hacia abajo, donde todos los valores ,no solo los puntos medio, se redondean hacia el infinito negativo. El resultado es el valor más cercano a y no mayor que el resultado infinitomente preciso. Al redondear a cero dígitos, esto equivale a la función matemática del piso; al redondear a un número distinto de cero de dígitos, aplica el mismo comportamiento en la precisión especificada. |
| ToPositiveInfinity | 4 | La estrategia de redondeo dirigido hacia arriba, donde cada valor , no solo los puntos intermedios, se redondea hacia el infinito positivo. El resultado es el valor más cercano a y no menor que el resultado infinitomente preciso. Al redondear a cero dígitos, esto equivale a la función de techo matemática; al redondear a un número distinto de cero de dígitos, aplica el mismo comportamiento en la precisión especificada. |
Ejemplos
En el ejemplo siguiente se muestra el Math.Round método junto con la MidpointRounding enumeración :
decimal result;
// Round a positive value using different strategies.
// The precision of the result is 1 decimal place.
result = Math.Round(3.45m, 1, MidpointRounding.ToEven);
Console.WriteLine($"{result} = Math.Round({3.45m}, 1, MidpointRounding.ToEven)");
result = Math.Round(3.45m, 1, MidpointRounding.AwayFromZero);
Console.WriteLine($"{result} = Math.Round({3.45m}, 1, MidpointRounding.AwayFromZero)");
result = Math.Round(3.47m, 1, MidpointRounding.ToZero);
Console.WriteLine($"{result} = Math.Round({3.47m}, 1, MidpointRounding.ToZero)\n");
// Round a negative value using different strategies.
// The precision of the result is 1 decimal place.
result = Math.Round(-3.45m, 1, MidpointRounding.ToEven);
Console.WriteLine($"{result} = Math.Round({-3.45m}, 1, MidpointRounding.ToEven)");
result = Math.Round(-3.45m, 1, MidpointRounding.AwayFromZero);
Console.WriteLine($"{result} = Math.Round({-3.45m}, 1, MidpointRounding.AwayFromZero)");
result = Math.Round(-3.47m, 1, MidpointRounding.ToZero);
Console.WriteLine($"{result} = Math.Round({-3.47m}, 1, MidpointRounding.ToZero)\n");
/*
This code example produces the following results:
3.4 = Math.Round(3.45, 1, MidpointRounding.ToEven)
3.5 = Math.Round(3.45, 1, MidpointRounding.AwayFromZero)
3.4 = Math.Round(3.47, 1, MidpointRounding.ToZero)
-3.4 = Math.Round(-3.45, 1, MidpointRounding.ToEven)
-3.5 = Math.Round(-3.45, 1, MidpointRounding.AwayFromZero)
-3.4 = Math.Round(-3.47, 1, MidpointRounding.ToZero)
*/
Dim result As Decimal = 0D
Dim posValue As Decimal = 3.45D
Dim negValue As Decimal = -3.45D
' Round a positive value using different strategies.
' The precision of the result is 1 decimal place.
result = Math.Round(posValue, 1, MidpointRounding.ToEven)
Console.WriteLine("{0,4} = Math.Round({1,5}, 1, MidpointRounding.ToEven)",
result, posValue)
result = Math.Round(posValue, 1, MidpointRounding.AwayFromZero)
Console.WriteLine("{0,4} = Math.Round({1,5}, 1, MidpointRounding.AwayFromZero)",
result, posValue)
result = Math.Round(posValue, 1, MidpointRounding.ToZero)
Console.WriteLine("{0,4} = Math.Round({1,5}, 1, MidpointRounding.ToZero)",
result, posValue)
Console.WriteLine()
' Round a negative value using different strategies.
' The precision of the result is 1 decimal place.
result = Math.Round(negValue, 1, MidpointRounding.ToEven)
Console.WriteLine("{0,4} = Math.Round({1,5}, 1, MidpointRounding.ToEven)",
result, negValue)
result = Math.Round(negValue, 1, MidpointRounding.AwayFromZero)
Console.WriteLine("{0,4} = Math.Round({1,5}, 1, MidpointRounding.AwayFromZero)",
result, negValue)
result = Math.Round(negValue, 1, MidpointRounding.ToZero)
Console.WriteLine("{0,4} = Math.Round({1,5}, 1, MidpointRounding.ToZero)",
result, negValue)
Console.WriteLine()
'This code example produces the following results:
'
' 3.4 = Math.Round(3.45, 1, MidpointRounding.ToEven)
' 3.5 = Math.Round(3.45, 1, MidpointRounding.AwayFromZero)
' 3.4 = Math.Round(3.45, 1, MidpointRounding.ToZero)
'
' -3.4 = Math.Round(-3.45, 1, MidpointRounding.ToEven)
' -3.5 = Math.Round(-3.45, 1, MidpointRounding.AwayFromZero)
' -3.4 = Math.Round(-3.45, 1, MidpointRounding.ToZero)
'
Comentarios
Use la enumeración MidpointRounding con las sobrecargas adecuadas de Math.Round, MathF.Round y Decimal.Round para proporcionar más control del proceso de redondeo.
A pesar del nombre de la enumeración, no todos los modos solo se tratan de cómo se controlan los puntos intermedios. MidpointRounding define dos estrategias generales de redondeo (redondeo aredondeo más cercano y dirigido) y cada campo de enumeración participa exactamente en una de estas estrategias:
- Los modos de redondeo a más cercano (AwayFromZero y ToEven) siempre se redondean al valor representable más cercano. Solo difieren entre sí cuando la entrada está exactamente a mitad de camino entre dos valores (un punto medio), que es lo que hace referencia el nombre de la enumeración.
- Los modos de redondeo dirigidos (ToNegativeInfinity, ToPositiveInfinityy ToZero) siempre redondean cada valor ,no solo los puntos intermedios, en una dirección fija. El resultado es el valor representable más cercano en esa dirección, incluso cuando la entrada no es un punto medio.
Redondeo al más cercano
Campos:
Una operación de redondeo al más cercano toma un número original con una precisión implícita o especificada; examina el siguiente dígito, que está en esa precisión más uno; y devuelve el número más cercano con la misma precisión que el número original. En el caso de los números positivos, si el siguiente dígito es de 0 a 4, el número más cercano es hacia el infinito negativo. Si el siguiente dígito es de 6 a 9, el número más cercano es hacia infinito positivo. En el caso de números negativos, si el siguiente dígito es de 0 a 4, el número más cercano se dirige al infinito positivo. Si el siguiente dígito es de 6 a 9, el número más cercano es hacia infinito negativo.
Si el siguiente dígito es de 0 a 4 o 6 a 9, la elección entre AwayFromZero y ToEven no afecta al resultado de la operación de redondeo. Sin embargo, si el siguiente dígito es 5, que es el punto medio entre dos resultados posibles, y todos los dígitos restantes son cero o no hay dígitos restantes, el número más cercano es ambiguo. En este caso, los modos de redondeo al más cercano en MidpointRounding te permiten especificar si la operación de redondeo devuelve el número más cercano alejado de cero o el número par más cercano.
En la tabla siguiente se muestran los resultados de redondear algunos números negativos y positivos en conjunto con los modos de redondeo al más cercano. La precisión utilizada para redondear los números es cero, lo que significa que el número después del separador decimal afecta a la operación de redondeo. Por ejemplo, para el número -2.5, el dígito después del separador decimal es 5. Dado que ese dígito es el punto medio, puede usar un MidpointRounding valor para determinar el resultado del redondeo. Si AwayFromZero se especifica , se devuelve -3 porque es el número más cercano lejos de cero con una precisión de cero. Si ToEven se especifica, se devuelve -2 porque es el número par más cercano con una precisión de cero.
| Número original | AwayFromZero | ToEven |
|---|---|---|
| 3.5 | 4 | 4 |
| 2.8 | 3 | 3 |
| 2,5 | 3 | 2 |
| 2.1 | 2 | 2 |
| -2.1 | -2 | -2 |
| -2.5 | -3 | -2 |
| -2.8 | -3 | -3 |
| -3.5 | -4 | -4 |
Redondeo dirigido
Campos:
Una operación de redondeo dirigida toma un número original con una precisión implícita o especificada y devuelve el siguiente número más cercano en una dirección específica con la misma precisión que el número original. Modos dirigidos en MidpointRounding el control de la dirección hacia la que se redondea cada valor. A diferencia de los modos más cercanos, estos modos se aplican a todos los valores de entrada, no solo a los puntos intermedios; por ejemplo, ToPositiveInfinity redondea 2.1, 2.5 y 2.8 hasta 3.
En la tabla siguiente se muestran los resultados de redondear algunos números negativos y positivos junto con los modos de redondeo dirigido. La precisión utilizada para redondear los números es cero, lo que significa que el número antes del separador decimal se ve afectado por la operación de redondeo.
| Número original | ToNegativeInfinity | ToPositiveInfinity | ToZero |
|---|---|---|---|
| 3.5 | 3 | 4 | 3 |
| 2.8 | 2 | 3 | 2 |
| 2,5 | 2 | 3 | 2 |
| 2.1 | 2 | 3 | 2 |
| -2.1 | -3 | -2 | -2 |
| -2.5 | -3 | -2 | -2 |
| -2.8 | -3 | -2 | -2 |
| -3.5 | -4 | -3 | -3 |