Principales respuestas
Problemas al agregar Ceros a la izquierda

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
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
Todas las respuestas
-
-
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
saludos
Leandro Tuttini
Blog
Buenos Aires
Argentina- Propuesto como respuesta Sergio Parra sábado, 13 de julio de 2013 0:42
-
"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.00Como 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,00Si 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.
-
> 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.00Leyendo 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.
-
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
-
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
saludos
Leandro Tuttini
Blog
Buenos Aires
ArgentinaHola 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
-
"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.
-
"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 -
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 -
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