none
Separador de miles y decimales RRS feed

  • Pregunta

  • Tengo un txtDocumento, que deseo que se muestre con el punto separador de miles, si bien así se muestran en la Base Access, en el TextBook se muestra sin puntos ¿Cómo puedo arreglarlo?

    Lo mismo con respecto a otro txtPesoNac, que deseo se muestre con 3 decimales, por ejemplo: 3,550 - que en este caso si lo pongo así en la base, en el TextBook, se redondea y se muestra 4 - ??????

    martes, 21 de julio de 2015 3:58

Respuestas

  • "Estedu" escribió:

    > Tengo un txtDocumento, que deseo que se muestre con el punto separador de miles,
    > si bien así se muestran en la Base Access, en el TextBook se muestra sin puntos
    > ¿Cómo puedo arreglarlo?

    Para que el número se muestre como lo hace en Acces, tienes que formatearlo de igual manera que le has indicado a Microsoft Access que muestre los números formateados.

    > Lo mismo con respecto a otro txtPesoNac, que deseo se muestre con 3 decimales,
    > por ejemplo: 3,550 - que en este caso si lo pongo así en la base, en el TextBook,
    > se redondea y se muestra 4 - ??????

    Si se redondea a 4 habría que ver el código que estás ejecutando para formatear el número, que más que formatear lo que te hace es redondear.

    Para los valores que comentas que deseas formatear, ejecuta el siguiente ejemplo:

        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
            ' Valores numéricos que deseamos formatear.
            '
            Dim valorNumericoEntero As Decimal = 25693929D
            Dim valorNumericoDecimal As Decimal = 35878.3826D
     
            ' Mostramos el resultado con el carácter separador de miles
            ' existente en la cultura del subproceso actual. 
            '
            txtDocumento.Text = String.Format("{0:N0}", valorNumericoEntero) 
       
            ' Mostramos el resultado con los caracteres separadores de miles
            ' y decimal, incluyendo tres dígitos decimales. 
            '
            txtPesoNac.Text = String.Format("{0:N3}", valorNumericoDecimal) ' 
    
        End Sub
    

    Si la cultura del subproceso actual es español de España, en el control txtDocumento se mostrará el valor 25.693.929 y en el control txtPesoNac el valor 35.878,383. En éste último sí se redondea por exceso el cuarto dígito decimal existente en el número decimal original.

    Ni que decir tiene que para formatear un número mediante el método String.Format, éstos tienen que estar almacenados en una variable numérica (Integer, Long, Double, Single, Decimal, etc.); no sirve que sea un número almacenado en una variable String, porque aunque el valor se parezca a un número, no deja de ser un valor alfanumérico.

    Es decir, el valor alfanumérico "35878.3826" (encerrado entre comillas dobles), se asemeja más al valor alfanumérico "¡Hola, Mundo!" que al valor numérico decimal 35878.3826D (sin comillas dobles). ;-)

    Un saludo


    Enrique Martínez Montejo
            [MS MVP - VB]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.

    • Marcado como respuesta Estedu jueves, 23 de julio de 2015 2:01
    martes, 21 de julio de 2015 6:28
    Moderador
  • "Estedu" escribió:

    > Esto parece que funciona

    ¿Qué es lo que "parece que funciona"?

    > Pero el tema es que solo muestra el valor numérico declarado en la
    > variable Dim, como hago para que allí se muestre el documento
    > registrado en la base, el cual como es de suponer, varia según el
    > registro.

    Si los valores numéricos que deseas formatear los tomas de alguna base de datos, esos valores numéricos se los tienes que asignar a una variable declarada con el tipo de dato numérico adecuado (Integer, Decimal, Double, Single, etc.):

        ' Recuperamos los datos existente en la base de datos
        '
        Dim valorBaseDatos As Decimal = LeerValorRegistro(parámetro1)
    
        ' Mostramos el resultado con el carácter separador de miles
        ' existente en la cultura del subproceso actual. 
        '
        txtDocumento.Text = String.Format("{0:N0}", valorBaseDatos)

    Se comprende que el procedimiento LeerValorRegistro() es una función que tienes implementada en tu proyecto para leer un registro de la base de datos de acuerdo al valor del parámetro especificado, y devolver el valor del campo de la tabla que deseas formatear.


    Enrique Martínez Montejo
            [MS MVP - VB]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.


    miércoles, 22 de julio de 2015 6:45
    Moderador

Todas las respuestas

  • Si quieres mostrar el valor con 2 decimales utiliza

    Dim Valor As Double = 1234.56
    TextBox1.Text = Valor.ToString("N2")

    Para tres decimales

    Dim Valor As Double = 1234.56
    TextBox1.Text = Valor.ToString("N3")

    Ten en cuenta también los tipos de variables en los que almacenas lo valores. Si son de tipo entero nunca te van a guardar los decimales.


    Saludos, Javier J

    martes, 21 de julio de 2015 6:23
  • "Estedu" escribió:

    > Tengo un txtDocumento, que deseo que se muestre con el punto separador de miles,
    > si bien así se muestran en la Base Access, en el TextBook se muestra sin puntos
    > ¿Cómo puedo arreglarlo?

    Para que el número se muestre como lo hace en Acces, tienes que formatearlo de igual manera que le has indicado a Microsoft Access que muestre los números formateados.

    > Lo mismo con respecto a otro txtPesoNac, que deseo se muestre con 3 decimales,
    > por ejemplo: 3,550 - que en este caso si lo pongo así en la base, en el TextBook,
    > se redondea y se muestra 4 - ??????

    Si se redondea a 4 habría que ver el código que estás ejecutando para formatear el número, que más que formatear lo que te hace es redondear.

    Para los valores que comentas que deseas formatear, ejecuta el siguiente ejemplo:

        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
            ' Valores numéricos que deseamos formatear.
            '
            Dim valorNumericoEntero As Decimal = 25693929D
            Dim valorNumericoDecimal As Decimal = 35878.3826D
     
            ' Mostramos el resultado con el carácter separador de miles
            ' existente en la cultura del subproceso actual. 
            '
            txtDocumento.Text = String.Format("{0:N0}", valorNumericoEntero) 
       
            ' Mostramos el resultado con los caracteres separadores de miles
            ' y decimal, incluyendo tres dígitos decimales. 
            '
            txtPesoNac.Text = String.Format("{0:N3}", valorNumericoDecimal) ' 
    
        End Sub
    

    Si la cultura del subproceso actual es español de España, en el control txtDocumento se mostrará el valor 25.693.929 y en el control txtPesoNac el valor 35.878,383. En éste último sí se redondea por exceso el cuarto dígito decimal existente en el número decimal original.

    Ni que decir tiene que para formatear un número mediante el método String.Format, éstos tienen que estar almacenados en una variable numérica (Integer, Long, Double, Single, Decimal, etc.); no sirve que sea un número almacenado en una variable String, porque aunque el valor se parezca a un número, no deja de ser un valor alfanumérico.

    Es decir, el valor alfanumérico "35878.3826" (encerrado entre comillas dobles), se asemeja más al valor alfanumérico "¡Hola, Mundo!" que al valor numérico decimal 35878.3826D (sin comillas dobles). ;-)

    Un saludo


    Enrique Martínez Montejo
            [MS MVP - VB]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.

    • Marcado como respuesta Estedu jueves, 23 de julio de 2015 2:01
    martes, 21 de julio de 2015 6:28
    Moderador
  • Que tal amigo, puedes hacer de la siguiente forma usando una funcion para aplicar a todos los texBox

    Ejemplo:

    Public Function SeparacionMiles(Numero As String) As String
        Return String.Format("{0:N0}", Convert.ToDouble(Numero))
    End Function
    texBox1.text=SeparacionMiles(texBox1.text.String())

    OBS: Favor vota si te es útil la información.
    Saludos
    Bader Molinas - Paraguay
    https://deveintel.wordpress.com/



    martes, 21 de julio de 2015 12:10
  • Esto parece que funciona, he puesto un Button1 para que se ejecute al pulsar el Button (luego pondría ese código en una función DocumentoTextBox_TextChanged).

    Pero el tema es que solo muestra el valor numérico declarado en la variable Dim, como hago para que allí se muestre el documento registrado en la base, el cual como es de suponer, varia según el registro.

    martes, 21 de julio de 2015 19:25
  • "Estedu" escribió:

    > Esto parece que funciona

    ¿Qué es lo que "parece que funciona"?

    > Pero el tema es que solo muestra el valor numérico declarado en la
    > variable Dim, como hago para que allí se muestre el documento
    > registrado en la base, el cual como es de suponer, varia según el
    > registro.

    Si los valores numéricos que deseas formatear los tomas de alguna base de datos, esos valores numéricos se los tienes que asignar a una variable declarada con el tipo de dato numérico adecuado (Integer, Decimal, Double, Single, etc.):

        ' Recuperamos los datos existente en la base de datos
        '
        Dim valorBaseDatos As Decimal = LeerValorRegistro(parámetro1)
    
        ' Mostramos el resultado con el carácter separador de miles
        ' existente en la cultura del subproceso actual. 
        '
        txtDocumento.Text = String.Format("{0:N0}", valorBaseDatos)

    Se comprende que el procedimiento LeerValorRegistro() es una función que tienes implementada en tu proyecto para leer un registro de la base de datos de acuerdo al valor del parámetro especificado, y devolver el valor del campo de la tabla que deseas formatear.


    Enrique Martínez Montejo
            [MS MVP - VB]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.


    miércoles, 22 de julio de 2015 6:45
    Moderador
  • Yo suelo utilizar lo siguiente:

    FormatNumber(Decimal.Parse(Me.txtDecimal.Text), 2, TriState.UseDefault, TriState.UseDefault, TriState.True)

    y la verdad es que nunca he tenido problemas.

    te adjunto una url donde se explica los parámetros del método FormatNumber:

    FormatNumber

    Un saludo.


    Solo unos pocos marcan las diferencias. Tu mismo

    miércoles, 22 de julio de 2015 9:40