Cum se formatează șirurile la dreapta pentru a le justifica atunci când imprimați


Rezumat


Există mai multe modalități diferite de a justifica corect șirurile utilizând funcția format :
  • Utilizați caracterul @.
  • Utilizați funcția RSet.
  • Utilizați soluțiile cu funcția format $.

Mai multe informații


Utilizarea caracterului @:

Notă: această tehnică este eficientă doar cu fonturi monospatiale, cum ar fi curier nou.
  1. Formatați numărul într-un șir cu caractere de conversie numerică, de exemplu, $ # #0.00.
  2. Formatați șirul rezultat cu un șir de formatare care constă într-un număr de caractere @ egale cu lungimea la formatul dorit, de exemplu, @ @ @ @ @ @ @.
Următorul eșantion de cod formatează mai multe numere utilizând șapte caractere @ și un format de șapte caractere, $ # #0.00.
   Print "|" & Format$(Format$(1.5, "$##0.00"), "@@@@@@@") & "|"   Print "|" & Format$(Format$(12.5, "$##0.00"), "@@@@@@@") & "|"   Print "|" & Format$(Format$(123.5, "$##0.00"), "@@@@@@@") & "|"
Rezultatul este;
|  $1.50|| $12.50||$123.50| 

Utilizând funcția RSet:

Atunci când este utilizat împreună cu RSet, funcția format funcționează pe șiruri de lungime fixă. Următorul exemplu de cod ilustrează utilizarea RSet:
   x = (Format$(123.5, "$##0.00"))   Print "x" & x & "x"   RSet x = (Format$(1.5, "$##0.00"))   Print "x" & x & "x"
Rezultatul este:
x$123.50x x  $1.50x 

Soluții folosind funcția format $:

Notă: aceste tehnici sunt eficiente doar cu fonturi monospatiale, cum ar fi curier nou. formatul $ function nu justifică corect șirurile atunci când este utilizat cu simbolul #. Primul eșantion de cod utilizează funcția Len pentru a determina câte spații trebuie adăugate la stânga șirului reprezentând numărul, pentru a justifica corect șirul:
   required = 8 ' longest number expected   a = 1.23   b = 44.56   num1$ = Format$(a, "#0.00") ' this converts the number to a string   num2$ = Format$(b, "#0.00") ' with 2 decimal places and a leading zero   'Debug.Print num2$   If (required - Len(num1$)) > 0 Then   num1$ = Space$(required - Len(num1$)) + num1$   End If      If (required - Len(num2$)) > 0 Then   num2$ = Space$(required - Len(num2$)) + num2$   End If' test output   Print num1$   Print num2$
Rezultatul este:
   1.23  44.56 
Al doilea format $ Sample este reimprimat cu permisiunea autorului său, Karl Peterson. Funcția sa iPadul utilizează funcția right $ :
Private Function LPad(ValIn As Variant, nDec As Integer, _                      WidthOut As Integer) As String'' Formatting function left pads with spaces, using specified' number of decimal digits.'   If IsNumeric(ValIn) Then      If nDec > 0 Then         LPad = Right$(Space$(WidthOut) & _                Format$(ValIn, "0." & String$(nDec, "0")), _                WidthOut)      Else         LPad = Right$(Space$(WidthOut) & Format$(ValIn, "0"), WidthOut)      End If   Else      LPad = Right$(Space$(WidthOut) & ValIn, WidthOut)   End IfEnd Function

Eșantion pas cu pas

  1. Porniți un nou proiect Visual Basic standard EXE. Form1 este creat în mod implicit.
  2. Adăugați patru controale CommandButton la Form1. Poziționați-le în extremitatea dreaptă a ferestrei formularului.
  3. Adăugați următorul cod la secțiunea declarații generale din Form1:
    Option ExplicitPrivate Sub Command1_Click()   Me.Print "|" & Format$(Format$(1.5, "$##0.00"), "@@@@@@@") & "|"   Me.Print "|" & Format$(Format$(12.5, "$##0.00"), "@@@@@@@") & "|"   Me.Print "|" & Format$(Format$(123.5, "$##0.00"), "@@@@@@@") & "|"End SubPrivate Sub Command2_Click()   Dim x As String   x = (Format$(123.5, "$##0.00"))   Me.Print "x" & x & "x"   RSet x = (Format$(1.5, "$##0.00"))   Me.Print "x" & x & "x"End SubPrivate Sub Command3_Click()   Dim required As Integer   Dim a As Single   Dim b As Single   Dim num1$, num2$   required = 8 ' longest number expected   a = 1.23   b = 44.56   num1$ = Format$(a, "#0.00") ' this converts the number to a string   num2$ = Format$(b, "#0.00") ' with two decimal places and a leading zero   'Debug.Print num2$   If (required - Len(num1$)) > 0 Then      num1$ = Space$(required - Len(num1$)) & num1$   End If      If (required - Len(num2$)) > 0 Then      num2$ = Space$(required - Len(num2$)) & num2$   End If' test output   Me.Print num1$   Me.Print num2$End SubPrivate Sub Command4_Click()   Dim xstring As String   xstring = LPad(2.3, 2, 7)   Me.Print "K" & xstring & "K"End SubPrivate Sub Form_Load()   Command1.Caption = "@"   Command1.Font.Size = 18   Command2.Caption = "Rset"   Command3.Caption = "Format$"   Command4.Caption = "VBPJ"   Me.Font.Name = "Courier New"End SubPrivate Function LPad(ValIn As Variant, nDec As Integer, _                      WidthOut As Integer) As String'' Formatting function left pads with spaces, using specified' number of decimal digits.'   If IsNumeric(ValIn) Then      If nDec > 0 Then         LPad = Right$(Space$(WidthOut) & _                Format$(ValIn, "0." & String$(nDec, "0")), _                WidthOut)      Else         LPad = Right$(Space$(WidthOut) & Format$(ValIn, "0"), WidthOut)      End If   Else      LPad = Right$(Space$(WidthOut) & ValIn, WidthOut)   End IfEnd Function
  4. Rulează programul, faceți clic pe butoanele de comandă și observați rezultatele.

Referințe


95945 Cum se justifică corect numerele utilizând formatul $
79094 PRB: format $ folosind # pentru cifră afectează alinierea la dreapta