VBA Tipp: Gepackte Dezimalzahlen einlesen

Aus DBWiki
Wechseln zu: Navigation, Suche

Aufgabenstellung

Ich habe Daten, die als gepackte Dezimalzahlen im COBOL COMP-3-Format vorliegen und möchte diese in Gleitkommazahlen wandeln.

Lösung

Public Function dblComp3(C3 As String, Optional d As Long = 2) As Double
Dim I As Long, MyByte As Byte, HiNibble As Byte, LoNibble As Byte, Res As Double
  Res = 0
  For I = 1 To Len(C3)
    MyByte = Asc(Mid(C3, I, 1))
    HiNibble = MyByte \ 16
    LoNibble = MyByte Mod 16
    If I = Len(C3) Then ' lowest byte
      Res = (Res * 10) + HiNibble
      If LoNibble = 13 Then Res = -Res  ' Hex "D" : negativ
    Else
      Res = (((Res * 10) + HiNibble) * 10) + LoNibble
    End If
  Next I
  dblComp3 = Res / (10 ^ d) ' Stellenzahl berücksichtigen
End Function


Aufruf

Debug.Print dblComp3(Chr(&H12) & Chr(&H34) & Chr(&H5D) ,0)
-12345


Weblinks