none
Problemas con coma decimal - Globalización. RRS feed

  • Pregunta

  • Hola:

    En el formulario ingreso la cantidad con la "," decimal (ej. 150,03). Y la página he puesto unas etiquetas para que me de la información de culture, y aparecen con los datos Culture: es-ES y UICulture: es-ES.

    La conversión la hago con el siguiente código:

     TextBox _tbPrecioTmp = (TextBox)linea.FindControl("tbPrecio");
     decimal _precio = Convert.ToDecimal(_tbPrecioTmp.Text);

    En _tbPrecioTmp.Text aparece el importe con el "." decimal, en vez de con la ",".    (Ej. 150.03)

    Y en _precio  aparece el importe sin decimales (ej. 15003)

    Le estuve dando vueltas y he mirado por internet y aunque en el web.config he puesto el siguiente código:

    <system.web>
        <globalization uiCulture="es" culture="es-ES" />

    No me resuelve el problema y quita los decimales convirtiéndolos en enteros.

    Si alguien sabe que más puedo hacer, estaría agradecido.

    Un Saludo.


    martes, 23 de junio de 2015 10:21

Respuestas

  • Hola:

    Probando, he quitado el siguiente código htlm:

    TextMode="Number" step="0.01"
    

    Y funciona perfectamente. El problema es que con dichos parámetros controlaba que solamente se pudiesen meter números con dos decimales y al quitar esto, se puede meter cualquier carácter, por lo que sale error.

    Esta era la única forma que he visto de controlar la entrada de datos, por lo que no se como puedo controlarla ahora.

    Un Saludo.

    • Marcado como respuesta elturle martes, 23 de junio de 2015 21:36
    martes, 23 de junio de 2015 20:59
  • hola

    >>Y funciona perfectamente. El problema es que con dichos parámetros controlaba que solamente se pudiesen meter números con dos decimales y al quitar esto, se puede meter cualquier carácter, por lo que sale error.

    claro el tema es que aplicas atributos de HTML5 y esto aplica la cultura de EEUU

    quizas debas usar controles con mascara de jquery para aplicar formato numerico

    maskInput

    salidos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta elturle martes, 23 de junio de 2015 21:36
    martes, 23 de junio de 2015 21:25

Todas las respuestas

  • Tienes que indicarle que utilice la cultura para realizar la conversión:

    TextBox _tbPrecioTmp = (TextBox)linea.FindControl("tbPrecio");
    decimal _precio = Convert.ToDecimal(_tbPrecioTmp.Text, System.Threading.Thread.CurrentThread.CurrentUICulture);
    


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    martes, 23 de junio de 2015 10:30
  • hola

    >>En _tbPrecioTmp.Text aparece el importe con el "." decimal, en vez de con la ",".    (Ej. 150.03)

    me parece muy raro lo que comentas, estas seguro que en el textbox has ingresado el importe con una coma como separador de decimales ?

    porque el textbox como control solo representa un string, este no cambia la informacion que el usuario ingreso

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 23 de junio de 2015 12:06
  • Hola:

    Asier: He probado lo que me has dicho y sigue haciendo lo mismo. Y creo que tiene el mismo funcionamiento, porque ya en el web.config le he puesto el tema cultural.

    Leandro: Como puedes observar en las imágenes de abajo, una es donde introduzco los datos, donde se ve que se hace mediante como, y la otra es una inspección del textbox, donde aparece ya con punto.

    Texto introducido con coma:

    Inspección de Textbox donde aparece con el punto:

    Un Saludo.

    martes, 23 de junio de 2015 13:42
  • Y entiendo que es un control TextBox normal.

    ¿En qué tipo de contenedor se encuentra? ¿Qué control es "lista"?


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    martes, 23 de junio de 2015 13:55
  • Hola:

    El textbox está dentro de un gridview  y el código que estoy utilizando e el siguiente:

    <asp:TemplateField HeaderText="Precio" SortExpression="Precio">
        <ItemTemplate>
               <asp:TextBox ID="tbPrecio" runat="server" Text='<%# Bind("Precio") %>' TextMode="Number" step="0.01" ></asp:TextBox>
        </ItemTemplate>
    </asp:TemplateField>

    Un Saludo.

    martes, 23 de junio de 2015 15:15
  • Hola:

    Probando, he quitado el siguiente código htlm:

    TextMode="Number" step="0.01"
    

    Y funciona perfectamente. El problema es que con dichos parámetros controlaba que solamente se pudiesen meter números con dos decimales y al quitar esto, se puede meter cualquier carácter, por lo que sale error.

    Esta era la única forma que he visto de controlar la entrada de datos, por lo que no se como puedo controlarla ahora.

    Un Saludo.

    • Marcado como respuesta elturle martes, 23 de junio de 2015 21:36
    martes, 23 de junio de 2015 20:59
  • hola

    >>Y funciona perfectamente. El problema es que con dichos parámetros controlaba que solamente se pudiesen meter números con dos decimales y al quitar esto, se puede meter cualquier carácter, por lo que sale error.

    claro el tema es que aplicas atributos de HTML5 y esto aplica la cultura de EEUU

    quizas debas usar controles con mascara de jquery para aplicar formato numerico

    maskInput

    salidos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta elturle martes, 23 de junio de 2015 21:36
    martes, 23 de junio de 2015 21:25
  • Muchas gracias.
    martes, 23 de junio de 2015 21:36