none
Validacion de tipo de dato Decimal RRS feed

  • Pregunta

  • Buenas estoy tratando de validar si el dato que ingreso en una caja de texto corresponde con un tipo de dato Decimal.

    Por ejemplo si se ingresara :

     

    Code Snippet

    2.2523

    1,2536

    2

    3

     

     

     

    cualquiera de los casos anteriores me devuelva como valido el valor , pero en caso de ingresar texto que sea inválido.

    Gracias

    sábado, 19 de abril de 2008 3:25

Respuestas

  • no habia nada mas facil:

     

    1ª forma: con try-catch si salta el formatexception es que no es un decimal...

     

    public void ConvertStringDecimal(string stringVal) {
        decimal decimalVal = 0;
       
        try {
            decimalVal = System.Convert.ToDecimal(stringVal);
            System.Console.WriteLine(
                "The string as a decimal is {0}.", decimalVal);
        }
        catch (System.OverflowException){
            System.Console.WriteLine(
                "The conversion from string to decimal overflowed.");
        }
        catch (System.FormatException) {
            System.Console.WriteLine(
                "The string is not formatted as a decimal.");//aqui es cuando sabes que no es un decimal...
        }
        catch (System.ArgumentNullException) {
            System.Console.WriteLine(
                "The string is null.");
        }

        // Decimal to string conversion will not overflow.
        stringVal = System.Convert.ToString(decimalVal);
        System.Console.WriteLine(
            "The decimal as a string is {0}.", stringVal);
    }   

     

    de otro modo:

     

    public static bool IsDecimal(string value)

    {

    try

    {

    decimal valor = System.Convert.ToDecimal(value);

    return true;

    }

    catch

    {

    return false;

    }

    }

     

    2ª forma: Regular Expression

     

    /// <summary>

    /// nos dice si el valor introducido es un numero del 0 al 9, y permite "," y "."

    /// </summary>

    /// <param name="value"></param>

    /// <returns></returns>

    public static bool IsDigitORSignoImporte(string value)

    {

    Regex pattern = new Regex("[0-9.,]");

    return pattern.IsMatch(value.Trim());

    }

     

    3ª forma: "is decimal"

     

    private bool estoEsDecimal(object value)

    {

    if(object is decimal)

    return true;

    else

    return false;

    }

     

    suerte espero haberte ayudado,

     

    un saludo

    jueves, 8 de mayo de 2008 15:44
  • Una forma mucho menos complicada:

    decimal numero;
    bool esDecimal;

    esDecimal = decimal.TryParse(textBox1.Text, out numero);
    if (esDecimal)
       ...pues es decimal y ya, haz lo que quieras aquí...
    else
       ...no es decimal, la vida continua...

    Por supuesto, la conversión también la puedes hacer más específica con la sobrecarga de TryParse.

    esDecimal = decimal.TryParse(textBox1.Text,
                                System.Globalization.NumberStyles.Number,
                                System.Globalization.CultureInfo.GetCultureInfo("es-mx"),
                                out num);

    De donde el segundo parámetro son flags que puedes emplear para determinar cómo quieres tratar el parseo. NumberStyles.Currency permitiría que manejaras el símbolo de moneda local, NumberStyles.AllowDecimalPoint permitiría que emplearas punto (o coma) decimal, etc. El tercer parámetro indica la cultura que quieres emplear (en este caso, estoy escogiendo "Español de México", con lo que el símbolo decimal sería el punto, el símbolo de moneda sería el "$", el separador de miles sería la coma, etc. Si pusieras "es-es", entonces el decimal sería la coma y el separador de miles, el punto. Pero vamos, que eso ya es si quieres profundizar más. Si no, la primera versión de TryParse es la adecuada.

    Saludos.
    jueves, 8 de mayo de 2008 22:27

Todas las respuestas

  • no habia nada mas facil:

     

    1ª forma: con try-catch si salta el formatexception es que no es un decimal...

     

    public void ConvertStringDecimal(string stringVal) {
        decimal decimalVal = 0;
       
        try {
            decimalVal = System.Convert.ToDecimal(stringVal);
            System.Console.WriteLine(
                "The string as a decimal is {0}.", decimalVal);
        }
        catch (System.OverflowException){
            System.Console.WriteLine(
                "The conversion from string to decimal overflowed.");
        }
        catch (System.FormatException) {
            System.Console.WriteLine(
                "The string is not formatted as a decimal.");//aqui es cuando sabes que no es un decimal...
        }
        catch (System.ArgumentNullException) {
            System.Console.WriteLine(
                "The string is null.");
        }

        // Decimal to string conversion will not overflow.
        stringVal = System.Convert.ToString(decimalVal);
        System.Console.WriteLine(
            "The decimal as a string is {0}.", stringVal);
    }   

     

    de otro modo:

     

    public static bool IsDecimal(string value)

    {

    try

    {

    decimal valor = System.Convert.ToDecimal(value);

    return true;

    }

    catch

    {

    return false;

    }

    }

     

    2ª forma: Regular Expression

     

    /// <summary>

    /// nos dice si el valor introducido es un numero del 0 al 9, y permite "," y "."

    /// </summary>

    /// <param name="value"></param>

    /// <returns></returns>

    public static bool IsDigitORSignoImporte(string value)

    {

    Regex pattern = new Regex("[0-9.,]");

    return pattern.IsMatch(value.Trim());

    }

     

    3ª forma: "is decimal"

     

    private bool estoEsDecimal(object value)

    {

    if(object is decimal)

    return true;

    else

    return false;

    }

     

    suerte espero haberte ayudado,

     

    un saludo

    jueves, 8 de mayo de 2008 15:44
  • Una forma mucho menos complicada:

    decimal numero;
    bool esDecimal;

    esDecimal = decimal.TryParse(textBox1.Text, out numero);
    if (esDecimal)
       ...pues es decimal y ya, haz lo que quieras aquí...
    else
       ...no es decimal, la vida continua...

    Por supuesto, la conversión también la puedes hacer más específica con la sobrecarga de TryParse.

    esDecimal = decimal.TryParse(textBox1.Text,
                                System.Globalization.NumberStyles.Number,
                                System.Globalization.CultureInfo.GetCultureInfo("es-mx"),
                                out num);

    De donde el segundo parámetro son flags que puedes emplear para determinar cómo quieres tratar el parseo. NumberStyles.Currency permitiría que manejaras el símbolo de moneda local, NumberStyles.AllowDecimalPoint permitiría que emplearas punto (o coma) decimal, etc. El tercer parámetro indica la cultura que quieres emplear (en este caso, estoy escogiendo "Español de México", con lo que el símbolo decimal sería el punto, el símbolo de moneda sería el "$", el separador de miles sería la coma, etc. Si pusieras "es-es", entonces el decimal sería la coma y el separador de miles, el punto. Pero vamos, que eso ya es si quieres profundizar más. Si no, la primera versión de TryParse es la adecuada.

    Saludos.
    jueves, 8 de mayo de 2008 22:27
  •  

    Bueno gracias a ambos por dar una respuesta a mi pregunta...

    Gracias me sirvio de mucho...

    Hasta una nueva oportunidad....

    sábado, 10 de mayo de 2008 14:47