none
Problemas al agregar Ceros a la izquierda RRS feed

  • Pregunta

  • Hola a todos, estoy desarrollando una aplicacion la cual utiliza impresora fiscal, el cual he logrado sincronizar sin ningun problema, el problema que al momento de emitir la factura, el precio total del item lo debo enviar a la impresora con ceros a la izquierda, al igual que la cantidad del producto

    pondré un ejemplo para asi explicar mas o menos que necesito

    si la cantidad del producto es 10, este debo enviarlo a la impresora de este modo 00010.000

    si el precio del producto es 150, deberia enviarlo a la impresora asi 00000150.00

    he probado con este codigo

    Dim valor As Integer = 8
    preciototal1 = String.Format("0000000000", valor)

    tambien con otros que he visto como este que lo encontré en este mismo foro

    Dim valor As Integer = 2
    
    TextBox1.Text = String.Format("{0:000}", valor)

    sin obtener resultado alguno

    viernes, 12 de julio de 2013 23:19

Respuestas

  • haciendo pruebas, al fin y al cabo pude resolver lo de los ceros a la izquierda, cree una variable tipo string y coloco el siguiente codigo

    dim tamaño as string = "00000000.##"
    sprecio1 = precio1.ToString(String.Format(tamaño))

    • Marcado como respuesta dario_axariel lunes, 15 de julio de 2013 22:52
    lunes, 15 de julio de 2013 22:52

Todas las respuestas

  • En base a que defines cuanto ceros a la izquierda quieres?
    viernes, 12 de julio de 2013 23:23
  • hola

    y si usas

    Dim valor As Integer = 8
    preciototal1 = String.Format("{0,0000000000:N2}", valor)

    alli aplicas ceros a la izquierda y ademas defines un formato numerico con 2 decimales

    Composite Formatting

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Propuesto como respuesta Sergio Parra sábado, 13 de julio de 2013 0:42
    sábado, 13 de julio de 2013 0:34
  • "dario_axariel" preguntó:

    > el problema que al momento de emitir la factura, el precio total
    > del item lo debo enviar a la impresora con ceros a la izquierda,
    > al igual que la cantidad del producto ...

    Hola:

    Si no te quieres complicar demasiado la vida con el formato del número final, lo mejor que puedes hacer es utilizar el método PadLeft de la clase System.String, el cual te devolverá una cadena alfanumérica rellena a la izquierda con tantos caracteres como desees, en tu caso rellena de tantos ceros como desees que contenga un número concreto.

    > si la cantidad del producto es 10, este debo enviarlo
    > a la impresora de este modo 00010.000
    >
    > si el precio del producto es 150, deberia enviarlo a
    > la impresora asi 00000150.00

    Como parece ser que también deseas que te aparezcan dos cifras decimales a la derecha del separador decimal, antes de llamar a la función PadLeft deberás formatear el número a 2 decimales mediante el método String.Format.

    Todo ello lo puedes hacer a la misma vez implementando una función que te devuelva un número con el formato que desees, tal y como así hace la siguiente función:

        ''' <summary>
        ''' Formatea un número a dos decimales, rellenándolo con
        ''' tantos ceros a la izquierda como se haya especificado.
        ''' </summary>
        ''' <author>Enrique M. Montejo - 2013</author>
        ''' <param name="valor">Número que se desea formatear.</param>
        ''' <param name="totalWidth">Número total de caracteres que
        ''' aparecerán a la izquierda del separador decimal.</param>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Friend Function PaddingLeft(valor As String, totalWidth As Integer) As String
    
            ' Verificamos si el valor String especificado
            ' se puede convertir a Decimal, lo que impedirá
            ' obtener una excepción si no se ha especificado
            ' un número.
            '
            Dim numero As Decimal
            Decimal.TryParse(valor, numero)
    
            ' Formatemos el número a un número fijo con 2 decimales.
            '
            valor = String.Format("{0:F2}", numero)
            
            ' Rellenamos con ceros a la izquierda el número total
            ' de caracteres especificadas más 3, que se corresponderán
            ' con el carácter decimal más los dos números decimales
            ' con los que hemos formateado el valor númerico decimal.
            '
            Return valor.PadLeft(totalWidth + 3, "0"c)
    
        End Function

    Esta función te puede servir para formatear cualquier número, porque tan solo deberás de especificar el número total de cifras que deseas que aparezcan a la izquierda del separador decimal.

    Cuando desees formatear los números, llamarías a la función de la siguiente manera:

        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
            Dim cantidad As String = PaddingLeft(TextBox1.Text, 5)
            Dim precio As String = PaddingLeft(TextBox2.Text, 8)
    
            TextBox1.Text = cantidad
            TextBox2.Text = precio
    
        End Sub

    Para la cantidad de 10 (TextBox1) y el precio de 150 (TextBox2), obtendrías el siguiente resultado:

        cantidad ==> 00010,00
        precio ====> 00000150,00

    Si deseas que te aparezca el separador de miles, en lugar de formatear el número como punto fijo:

        valor = String.Format("{0:F2}", numero)

    hazlo de ésta otra manera:

        valor = String.Format("{0:N2}", numero)

    Un saludo


    Enrique Martínez
      [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, activa la instrucción Option Strict.

    sábado, 13 de julio de 2013 7:18
    Moderador
  • > si la cantidad del producto es 10, este debo enviarlo
    > a la impresora de este modo 00010.000
    >
    > si el precio del producto es 150, deberia enviarlo a
    > la impresora asi 00000150.00

    Leyendo de nuevo tu pregunta, no sé si tu sistema operativo tiene una configuración regional de inglés, o es que SIEMPRE deseas utilizar el punto decimal como carácter separador de decimales. Si es esto último lo que deseas hacer, entonces no puedes hacer uso de la función String.Format o de cualquier otra que tenga en cuenta la configuración regional del usuario, porque para un sistema operativo en español devolverá la coma decimal, y el punto decimal para un sistema operativo en inglés.

    Para que no se tenga en cuenta la configuración regional del usuario y devolver siempre el punto decimal, modifica la función PaddingLeft para dejarla como indico a continuación:

        ''' <summary>
        ''' Formatea un número a dos decimales, rellenándolo con
        ''' tantos ceros a la izquierda como se haya especificado.
        ''' </summary>
        ''' <author>Enrique M. Montejo - 2013</author>
        ''' <param name="valor">Número que se desea formatear.</param>
        ''' <param name="totalWidth">Número total de caracteres que
        ''' aparea la izquierda del separador decimal.</param>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Friend Function PaddingLeft(valor As String, totalWidth As Integer) As String
    
            ' Verificamos si el valor String especificado
            ' se puede convertir a Decimal, lo que impedirá
            ' obtener una excepción si no se ha especificado
            ' un número.
            '
            Dim numero As Decimal
            Decimal.TryParse(valor, numero)
    
            ' Formatemos el número a un número fijo con 2 decimales.
            '
            valor = String.Format("{0:F2}", numero)
    
            ' Obtenemos el carácter separador decimal existente
            ' actualmente en la confiruración regional del usuario.
            '
            Dim ci As Globalization.CultureInfo = Threading.Thread.CurrentThread.CurrentCulture
            Dim ds As String = ci.NumberFormat.NumberDecimalSeparator
    
            If (ds <> ".") Then
                ' Reemplazamos el separador decimal, siempre y
                ' cuando éste sea diferente al punto decimal.
                valor = valor.Replace(ds, ".")
            End If
    
            ' Rellenamos con ceros a la izquierda el número total
            ' de caracteres especificadas más 3, que se corresponderán
            ' con el carácter decimal más los dos números decimales
            ' con los que hemos formateado el valor númerico decimal.
            '
            Return valor.PadLeft(totalWidth + 3, "0"c)
    
        End Function


    Enrique Martínez
      [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, activa la instrucción Option Strict.

    sábado, 13 de julio de 2013 7:51
    Moderador
  • Hola Enrique, el detalle es el siguiente, debo colocar el separador decimal en punto puesto que la impresora fiscal como tal no reconoce la coma como separador decimal sino el punto, por lo que si mando el comando con la coma la impresora no lo reconocera y por tal razon no imprimirá la factura
    lunes, 15 de julio de 2013 13:03
  • hola

    y si usas

    Dim valor As Integer = 8
    preciototal1 = String.Format("{0,0000000000:N2}", valor)

    alli aplicas ceros a la izquierda y ademas defines un formato numerico con 2 decimales

    Composite Formatting

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    Hola leandro, gracias por la respuesta, hice la prueba, me funciona los formatos decimales, pero no me coloca los cero a la izquierda

    el registro originalmente estaba 135,7100,  por lo que al probar el queda de esta manera 135,71, pero deberia quedar asi 00000135.71, y esto solo me funciono declarando preciototal como decimal, sin embargo seguire probando

    lunes, 15 de julio de 2013 14:19
  • "dario_axariel" escribió:

    > el detalle es el siguiente, debo colocar el separador decimal en punto
    > puesto que la impresora fiscal como tal no reconoce la coma como
    > separador decimal sino el punto, ...

    Las impresoras que yo suelo utilizar, imprimen los caracteres que se les envía, incluyendo los puntos y comas que contenga el texto que se desea imprimir. ;-)

    De todas maneras, entiendo que la función PaddingLeft que aparece en mi SEGUNDA RESPUESTA cumple con creces con lo que deseas hacer. ¿Lo has probado?

     


    Enrique Martínez
      [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, activa la instrucción Option Strict.

    lunes, 15 de julio de 2013 14:43
    Moderador
  • "dario_axariel" escribió:

    > el detalle es el siguiente, debo colocar el separador decimal en punto
    > puesto que la impresora fiscal como tal no reconoce la coma como
    > separador decimal sino el punto, ...

    Las impresoras que yo suelo utilizar, imprimen los caracteres que se les envía, incluyendo los puntos y comas que contenga el texto que se desea imprimir. ;-)

    De todas maneras, entiendo que la función PaddingLeft que aparece en mi SEGUNDA RESPUESTA cumple con creces con lo que deseas hacer. ¿Lo has probado?

     


    Enrique Martínez
      [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, activa la instrucción Option Strict.


    hola enrique ya estoy por hacer la prueba con la segunda respuesta, la impresora fiscal trabaja mediante linea de comandos que yo le suministro desde mi programa, el cual trabaja con una dll que me fue facilitado por el mismo fabricante
    lunes, 15 de julio de 2013 17:31
  • Hola enrique acabo de probar lo siguiente

    en mi formulario coloque este codigo

    Dim punto As New Globalization.CultureInfo("es-VE")
    punto.NumberFormat.CurrencyDecimalSeparator = "."
    punto.NumberFormat.NumberDecimalSeparator = "."
    System.Threading.Thread.CurrentThread.CurrentCulture = punto
    luego hice un breackpoint para ver el resultado, encontrando que cambia el punto por la coma, originalmente estaba asi 135,71 ahora lo tengo asi 135.71, por lo que me faltaria colocar los ceros a la izquierda
    lunes, 15 de julio de 2013 18:20
  • haciendo pruebas, al fin y al cabo pude resolver lo de los ceros a la izquierda, cree una variable tipo string y coloco el siguiente codigo

    dim tamaño as string = "00000000.##"
    sprecio1 = precio1.ToString(String.Format(tamaño))

    • Marcado como respuesta dario_axariel lunes, 15 de julio de 2013 22:52
    lunes, 15 de julio de 2013 22:52