none
decimal menor que c# RRS feed

  • Pregunta

  • hola a todos tengo el siguiente codigo

    if (Convert.ToDecimal(tb_val_tcm.Text)>10)
                {
                    return "Dato no valido, el T.C. debe ser menor que 10";
                }

    donde le digo que el valor (decimal o entero) que se ingrese en el textbox "tb_val_tcm" que sea menor que 10 

    cuando igreso numeros enteros todo bien acepta la instruccion

    el problema es que cuando intento ingresar un decimal en el textbox. por ejemplo pongo un 4.5 dentro el textbox, cuando hace la comparacion tomal el 4.5 como 45.. y me retorna el mensaje cuando en realidad 4.5 es menor que 10 por lo cual no deberia retornar el mensaje

    y pasa lo mismo con cualquier decimal le quita el punto y lo vuelve un entero

    como podria solucionar el problema??

    jueves, 9 de noviembre de 2017 20:03

Respuestas

  • Buenas

    Puedes hacer un replace para cambiar el '.' por la coma ',':

    if (Convert.ToDecimal(tb_val_tcm.Text.Replace('.',','))>10)
    {
        return "Dato no valido, el T.C. debe ser menor que 10";
    }


    De todos modos, si el programa puede estar en PCs que no controlas, te convendria hacer un replace con la configuracion regional de separador de miles y de decimales, por si algun usuario los tiene cambiados:

    //Obtenemos los separadores
    char coma,miles;
    
    if (System.Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator == ",")
    {
        coma = ',';
        miles = '.';
    }
    else
    {
        coma = '.';
        miles = ',';
    }
    
    //Hacemos el replace con los separadores
    if (Convert.ToDecimal(tb_val_tcm.Text.Replace(miles ,coma ))>10)
    {
        return "Dato no valido, el T.C. debe ser menor que 10";
    }
    Esta hecho almacenando el valor de comas y miles en un char por si quieres guardarlos a nivel de formulario y así no lo calculas en cada llamada al método (y te vale para otros métodos), si no lo necesitas así, podrías meter tu if dentro de los otros if y cambiar coma y miles por los caracteres en concreto. 

    Nos comentas el resultado

    Atte


    No olvides votar mi comentario si te ha ayudado y marcarlo como respuesta si ha sido la solución, con eso ayudas a mejorar mi reputación en la comunidad y a identificar la respuesta a la gente que tenga el mismo problema.

    Para obtener una respuesta lo más rápida y concisa posible, te recomiendo:


    • Editado Jorge TurradoMVP jueves, 9 de noviembre de 2017 20:30
    • Marcado como respuesta aldair1225 jueves, 9 de noviembre de 2017 21:05
    jueves, 9 de noviembre de 2017 20:21

Todas las respuestas

  • Buenas

    Puedes hacer un replace para cambiar el '.' por la coma ',':

    if (Convert.ToDecimal(tb_val_tcm.Text.Replace('.',','))>10)
    {
        return "Dato no valido, el T.C. debe ser menor que 10";
    }


    De todos modos, si el programa puede estar en PCs que no controlas, te convendria hacer un replace con la configuracion regional de separador de miles y de decimales, por si algun usuario los tiene cambiados:

    //Obtenemos los separadores
    char coma,miles;
    
    if (System.Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator == ",")
    {
        coma = ',';
        miles = '.';
    }
    else
    {
        coma = '.';
        miles = ',';
    }
    
    //Hacemos el replace con los separadores
    if (Convert.ToDecimal(tb_val_tcm.Text.Replace(miles ,coma ))>10)
    {
        return "Dato no valido, el T.C. debe ser menor que 10";
    }
    Esta hecho almacenando el valor de comas y miles en un char por si quieres guardarlos a nivel de formulario y así no lo calculas en cada llamada al método (y te vale para otros métodos), si no lo necesitas así, podrías meter tu if dentro de los otros if y cambiar coma y miles por los caracteres en concreto. 

    Nos comentas el resultado

    Atte


    No olvides votar mi comentario si te ha ayudado y marcarlo como respuesta si ha sido la solución, con eso ayudas a mejorar mi reputación en la comunidad y a identificar la respuesta a la gente que tenga el mismo problema.

    Para obtener una respuesta lo más rápida y concisa posible, te recomiendo:


    • Editado Jorge TurradoMVP jueves, 9 de noviembre de 2017 20:30
    • Marcado como respuesta aldair1225 jueves, 9 de noviembre de 2017 21:05
    jueves, 9 de noviembre de 2017 20:21
  • Hola, deberías probar parsear el txt así:

      decimal result;
                if (decimal.TryParse(tb_val_tcm.text, out result))
                    ; // decimal válido
                else
                    ; // excepción decimal no válido

    En segundo lugar tienes que ver como está la configuración regional de tu sistema, quizás tienes la configuración regional en Español-España, en dicho caso esta configuración te tomará la coma como separador de miles y el punto como separador decimal. Puedes cambiar esto desde Panel de Control -> Reloj, idioma y religión -> Cambiar formatos de fecha, hora y número -> Configuración Adicional.

    Espero te sirva la ayuda... saludos.-


    jueves, 9 de noviembre de 2017 20:35