Visual Basic.NET - encolumnar numeros

 
Vista:
Imágen de perfil de edgardo
Val: 54
Ha aumentado su posición en 3 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

encolumnar numeros

Publicado por edgardo (17 intervenciones) el 14/11/2020 23:55:59
Hola: alguien sabe como encolumnar números en un listado usando printDocument , es decir
que aparezca algo así : $ 789,79
$ 23,80
ordenado por cifras y que No este todo desordenado como asi:
$789,79
$23,8
y encima me Come el 0 (cero) final de los centavos.
gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

encolumnar numeros

Publicado por Phil Rob (1554 intervenciones) el 15/11/2020 10:58:46
Hola,

Tengo veces soluciones.

Para testar, lleno una ListBox con valores de -1, -0.75, -0.50, -0.25, 0.00, 0.25, …, 9.75, 10.00, 10.25. Esta manera permite de ver bien la alineación de los caracteres.

Solución 1 :

1
2
3
For V As Double = -1 To 10.5 Step 0.25
    ListBox1.Items.Add("$ " & String.Format("{0:###0.00}", V))
Next

Soluc1
Este es bien para los decimales pero no hay alineación correcta para el resto.

Solución 2 :

Utilizo la función ALongueur que ser me ordinariamente para arreglar las longitudes de los campos en los ficheros a acceso directo.

Este es esta funcion :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
' La funcion ALongueur hace el arreglo de la longitud y la alineación de una cadena de caracteres
Private Function ALongueur(ByVal UneChaine As String, ByVal UneLongueur As Integer, Optional ByVal Alignement As Byte = 0, Optional ByVal Caractere As Char = " "c) As String
    ' UneChaine : la cadena a cargar o cortar
    ' UneLongueur : cantidad de caracteres esperados al final
    ' Alignement : 0 es Alineación a la izquierda, 1 es Alineación a la derecha. Este es 0 por defecto
    ' Caractere = carácter para agregar, " " por defecto
    Select Case Alignement
        Case 0                    ' Alineación a la izquierda (cortar o agregar a la derecha)
            If UneChaine.Length > UneLongueur Then
                Return UneChaine.Substring(0, UneLongueur)
            Else
                Return UneChaine.PadRight(UneLongueur, Caractere)
            End If
        Case 1                    ' Alineación a la derecha (cortar o agregar a la izquierda)
            If UneChaine.Length > UneLongueur Then
                Return UneChaine.Substring(UneChaine.Length - UneLongueur, UneLongueur)
            Else
                Return UneChaine.PadLeft(UneLongueur, Caractere)
            End If
    End Select
End Function
Y este mi prueba con este función :
1
2
3
For V As Double = -1 To 10.5 Step 0.25
    ListBox1.Items.Add("$ " & ALongueur(String.Format("{0:#0.00}", V), 8, 1))
Next

Soluc2
El resultado es casi perfecto. Hay todavía un pequeño problema cuando pasamos de 9.75 a 10.00. La razón es el tipo de los caracteres: con Arial, Time New Roman, …, todos caracteres no tienen la misma amplitud. Si utilizamos Courier New, el resultado es perfecto. Este es la solución siguiente.
Claro, con los ficheros a acceso directo, no existe este problema.
Si existe un programador dinámico, este es posible rescribir la funcion ALongueur para tratar los caracteres a la izquierda y a la derecha del punto.

Solución 3 :

1
2
3
4
ListBox1.Font = New Font("Courier New", 8, FontStyle.Bold)
For V As Double = -1 To 10.5 Step 0.25
    ListBox1.Items.Add("$ " & ALongueur(String.Format("{0:#0.00}", V), 8, 1))
Next

Soluc3

Espero te dar buenas ideas ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar