Unicode(货币问题)

又是Unicode问题。
西班牙语系有20种分支。但大概有5,6中表达方法。
mvLCID=LCID

Public   Function   FormatCurrency(CurVal   As   Double,   Optional   UseGrouping   As   Boolean   =   True,   Optional   ShowCSymbol   As   Boolean   =   True)   As   String
      Dim   NumDigits                 As   Integer
      Dim   LeadingZero             As   Integer
      Dim   Grouping                   As   Integer
      Dim   decSep                       As   String
      Dim   thouSep                     As   String
      Dim   negOrder                   As   Integer
      Dim   posOrder                   As   Integer
      Dim   cSymb                         As   String
      Dim   posIntVal                 As   Double,   intStr   As   String
      Dim   posDecVal                 As   Double,   decStr   As   String
      Dim   negNum                       As   Boolean,   i   As   Integer
      Dim   fCur                           As   String

      NumDigits   =   CInt(pfGLI(LOCALE_IDIGITS))
      LeadingZero   =   CInt(pfGLI(gliILZERO))
      Grouping   =   CInt(Left(pfGLI(gliSGROUPING),   1))
      decSep   =   Left(pfGLI(gliSDECIMAL),   1)
      thouSep   =   Left(pfGLI(gliSTHOUSAND),   1)
      negOrder   =   CInt(pfGLI(gliINEGCURR))
      posOrder   =   CInt(pfGLI(gliICURRENCY))
      cSymb   =   pfGLI(gliSCURRENCY)

      If   Not   ShowCSymbol   Then   cSymb   =   ""

      If   CurVal   <   0   Then   negNum   =   True
      posIntVal   =   Abs(Fix(CurVal))
      posDecVal   =   Abs(CurVal   -   Fix(CurVal))   *   (10   ^   NumDigits)

      intStr   =   Format(posIntVal,   "#############################################")
      decStr   =   Format(posDecVal,   String(NumDigits,   "0"))

      If   UseGrouping   And   Grouping   >   0   And   Len(intStr)   >   Grouping   Then
            '   Insert   the   ordinal   separators   in   the   integer   part   of   the   number
            For   i   =   Grouping   To   Len(intStr)   Step   Grouping   +   1
                  intStr   =   Left(intStr,   Len(intStr)   -   i)   +   thouSep   +   Right(intStr,   i)
            Next
      End   If

      '   Final   format
      If   negNum   Then
            Select   Case   negOrder
                  Case   0
                        fCur   =   "("   +   cSymb   +   intStr   +   decSep   +   decStr   +   ")"
                  Case   1
                        fCur   =   "-"   +   cSymb   +   intStr   +   decSep   +   decStr
                  Case   2
                        fCur   =   cSymb   +   "-"   +   intStr   +   decSep   +   decStr
                  Case   3
                        fCur   =   cSymb   +   intStr   +   decSep   +   decStr   +   "-"
                  Case   4
                        fCur   =   "("   +   intStr   +   decSep   +   decStr   +   cSymb   +   ")"
                  Case   5
                        fCur   =   "-"   +   intStr   +   decSep   +   decStr   +   cSymb
                  Case   6
                        fCur   =   intStr   +   decSep   +   decStr   +   "-"   +   cSymb
                  Case   7
                        fCur   =   intStr   +   decSep   +   decStr   +   cSymb   +   "-"
                  Case   8
                        fCur   =   "-"   +   intStr   +   decSep   +   decStr   +   "   "   +   cSymb
                  Case   9
                        fCur   =   "-"   +   cSymb   +   "   "   +   intStr   +   decSep   +   decStr
                  Case   10
                        fCur   =   intStr   +   decSep   +   decStr   +   "   "   +   cSymb   +   "-"
                  Case   11
                        fCur   =   cSymb   +   "   "   +   intStr   +   decSep   +   decStr   +   "-"
                  Case   12
                        fCur   =   cSymb   +   "   -"   +   intStr   +   decSep   +   decStr
                  Case   13
                        fCur   =   intStr   +   decSep   +   decStr   +   "-   "   +   cSymb
                  Case   14
                        fCur   =   "("   +   cSymb   +   "   "   +   intStr   +   decSep   +   decStr   +   ")"
                  Case   15
                        fCur   =   "("   +   intStr   +   decSep   +   decStr   +   "   "   +   cSymb   +   ")"
                  Case   Else
                        fCur   =   "-"   +   cSymb   +   intStr   +   decSep   +   decStr
            End   Select
      Else
            Select   Case   posOrder
                  Case   0
                        fCur   =   cSymb   +   intStr   +   decSep   +   decStr
                  Case   1
                        fCur   =   intStr   +   decSep   +   decStr   +   cSymb
                  Case   2
                        fCur   =   cSymb   +   "   "   +   intStr   +   decSep   +   decStr
                  Case   3
                        fCur   =   intStr   +   decSep   +   decStr   +   "   "   +   cSymb
                  Case   Else
                        fCur   =   cSymb   +   intStr   +   decSep   +   decStr
            End   Select
      End   If

      FormatCurrency   =   Trim(fCur)

End   Function

Private   Function   pfGLI(reqInfo   As   GLITypes,   _
      Optional   ByVal   bUnicode   As   Boolean   =   False)   As   String

      Dim   aStr                           As   String

      aStr   =   String(255,   Chr(0))
      If   bUnicode   Then
            GetLocaleInfoW   mvLCID,   reqInfo,   StrPtr(aStr),   255
            pfGLI   =   aStr   'StrConv(aStr,   vbFromUnicode)
      Else
            GetLocaleInfo   mvLCID,   reqInfo,   aStr,   255
            aStr   =   Left(aStr,   InStr(1,   aStr,   Chr(0))   -   1)
            pfGLI   =   aStr
      End   If

End   Function

'   This   just   makes   my   life   a   little   easier
Private   Enum   GLITypes
      gliICALENDARTYPE   =   &H1009
      gliIOPTIONALCALENDAR   =   &H100B
      gliICENTURY   =   &H24
      gliICOUNTRY   =   &H5
      gliICURRDIGITS   =   &H19
      gliICURRENCY   =   &H1B
      gliIDATE   =   &H21
      gliIDAYLZERO   =   &H26
      gliIDEFAULTCODEPAGE   =   &HB
      gliIDEFAULTCOUNTRY   =   &HA
      gliIDEFAULTLANGUAGE   =   &H9
      gliIDIGITS   =   &H11
      gliIINTLCURRDIGITS   =   &H1A
      gliILANGUAGE   =   &H1
      gliILDATE   =   &H22
      gliILZERO   =   &H12
      gliIMEASURE   =   &HD
      gliIMONLZERO   =   &H27
      gliINEGCURR   =   &H1C
      gliINEGSEPBYSPACE   =   &H57
      gliINEGSIGNPOSN   =   &H53
      gliINEGSYMPRECEDES   =   &H56
      gliIPOSSEPBYSPACE   =   &H55
      gliIPOSSIGNPOSN   =   &H52
      gliIPOSSYMPRECEDES   =   &H54
      gliITIME   =   &H23
      gliITLZERO   =   &H25
      gliNOUSEROVERRIDE   =   &H80000000
      gliS1159   =   &H28
      gliS2359   =   &H29
      gliSABBREVCTRYNAME   =   &H7
      gliSABBREVDAYNAME1   =   &H31
      gliSABBREVDAYNAME2   =   &H32
      gliSABBREVDAYNAME3   =   &H33
      gliSABBREVDAYNAME4   =   &H34
      gliSABBREVDAYNAME5   =   &H35
      gliSABBREVDAYNAME6   =   &H36
      gliSABBREVDAYNAME7   =   &H37
      gliSABBREVLANGNAME   =   &H3
      gliSABBREVMONTHNAME1   =   &H44
      gliSABBREVMONTHNAME10   =   &H4D
      gliSABBREVMONTHNAME11   =   &H4E
      gliSABBREVMONTHNAME12   =   &H4F
      gliSABBREVMONTHNAME13   =   &H100F
      gliSABBREVMONTHNAME2   =   &H45
      gliSABBREVMONTHNAME3   =   &H46
      gliSABBREVMONTHNAME4   =   &H47
      gliSABBREVMONTHNAME5   =   &H48
      gliSABBREVMONTHNAME6   =   &H49
      gliSABBREVMONTHNAME7   =   &H4A
      gliSABBREVMONTHNAME8   =   &H4B
      gliSABBREVMONTHNAME9   =   &H4C
      gliSCOUNTRY   =   &H6
      gliSCURRENCY   =   &H14
      gliSDATE   =   &H1D
      gliSDAYNAME1   =   &H2A
      gliSDAYNAME2   =   &H2B
      gliSDAYNAME3   =   &H2C
      gliSDAYNAME4   =   &H2D
      gliSDAYNAME5   =   &H2E
      gliSDAYNAME6   =   &H2F
      gliSDAYNAME7   =   &H30
      gliSDECIMAL   =   &HE
      gliSENGCOUNTRY   =   &H1002
      gliSENGLANGUAGE   =   &H1001
      gliSGROUPING   =   &H10
      gliSINTLSYMBOL   =   &H15
      gliSLANGUAGE   =   &H2
      gliSLIST   =   &HC
      gliSLONGDATE   =   &H20
      gliSMONDECIMALSEP   =   &H16
      gliSMONGROUPING   =   &H18
      gliSMONTHNAME1   =   &H38
      gliSMONTHNAME10   =   &H41
      gliSMONTHNAME11   =   &H42
      gliSMONTHNAME12   =   &H43
      gliSMONTHNAME2   =   &H39
      gliSMONTHNAME3   =   &H3A
      gliSMONTHNAME4   =   &H3B
      gliSMONTHNAME5   =   &H3C
      gliSMONTHNAME6   =   &H3D
      gliSMONTHNAME7   =   &H3E
      gliSMONTHNAME8   =   &H3F
      gliSMONTHNAME9   =   &H40
      gliSMONTHOUSANDSEP   =   &H17
      gliSNATIVECTRYNAME   =   &H8
      gliSNATIVEDIGITS   =   &H13
      gliSNATIVELANGNAME   =   &H4
      gliSNEGATIVESIGN   =   &H51
      gliSPOSITIVESIGN   =   &H50
      gliSSHORTDATE   =   &H1F
      gliSTHOUSAND   =   &HF
      gliSTIME   =   &H1E
      gliSTIMEFORMAT   =   &H1003
End   Enum
posted @ 2008-01-08 16:16  HappyQQ  阅读(392)  评论(0编辑  收藏  举报