Redondeo expecífico

private string Redondea(string precio, string redondeo)
{
    string retorna;
    redondeo = redondeo.Replace('.', ',');
    string valor = precio.Replace('.', ',');
    string[] resultado = valor.Split(',');
    int entero = Convert.ToInt32(resultado[0]);
    int decimales;
    double calculo = Convert.ToDouble(precio);
 
    if (resultado.Count() == 2)
    {
        decimales = Convert.ToInt32(resultado[1]);
        if (decimales.ToString().Length == 1)
        {
            decimales = (decimales * 10);
        }
    }
    else
    {
        decimales = 00;
    }
    if (redondeo != "0,00")
    {
        if (decimales.ToString() == redondeo)
        {
            calculo = Math.Round(Convert.ToDouble(valor), 2);
        }
        else
        {
            if (Convert.ToInt32(decimales) >= 50)
            {
                if ((redondeo == "0,00") && (decimales != 0))
                {
                    calculo = entero + 1;
                }
                else
                {
                    calculo = entero + Convert.ToDouble(redondeo);
                }
            }
            else
            {
                if ((redondeo == "0,00") || (decimales == 00))
                {
                    calculo = entero;
                }
                else
                {
                    double deci = Convert.ToDouble(redondeo);
 
                    calculo = (entero - 1) + deci;
                }
            }
        }
    }
    else
    {
        calculo = Math.Round(Convert.ToDouble(valor), 0);
    }
    retorna = calculo.ToString("N");
    return retorna;
}

Ejemplo de uso:

Redondea("3.06", "0.00"); // Devuelve 3
Redondea("3.06", "0.90"); // Devuelve 2.90
Redondea("3.56", "0.90"); // Devuelve 3.90

Navegación

Software de programación

Ayuda al servidor