.net - resultado - redondear promedio en excel
Método.NET para redondear un número hasta el múltiplo más cercano de otro número? (4)
Estoy buscando un método que pueda redondear un número hasta el múltiplo más cercano de otro. Esta es una Cuantización similar.
P.ej. Si quiero redondear 81 hasta el múltiplo más cercano de 20, debería devolver 100.
¿Hay un método incorporado en el método en el marco de .NET que puedo usar para esto?
La razón por la que estoy pidiendo un método integrado es porque hay una buena probabilidad de que ya se haya optimizado.
Sí, aritmética entera.
Para redondear m hasta el siguiente múltiplo de n, use ((m + n-1) / n) * n
public static int RoundUp(int num, int multiple)
{
if (multiple == 0)
return 0;
int add = multiple / Math.Abs(multiple);
return ((num + multiple - add) / multiple)*multiple;
}
static void Main()
{
Console.WriteLine(RoundUp(5, -2));
Console.WriteLine(RoundUp(5, 2));
}
/* Output
* 4
* 6
*/
Si está utilizando muchos de estos en una plataforma relativamente lenta, puede eliminar la multiplicación usando una variante de:
t = m + n - 1; return (t - (t% n));
Por supuesto, si puede limitar su múltiplo a valores de 2 ^ n, entonces la operación del módulo también puede ser desaprobada a favor de su equivalente lógico (generalmente "&").
Incidentalmente, la función "RoundUp" ilustrada arriba está seriamente defectuosa y solo redondeará correctamente cuando {(m% n) == (n - 1)}; redondear hacia abajo está implícito para la división de enteros y, como tal, no requiere compensación.
La respuesta de Lee es buena, pero debería haber sido:
t = m + n - 1; return (t - (t % m));
Observe el cambio de N
a M
La operación del módulo debe hacerse con el multiplicador (m)
y no con el número (n)
.