You can use the UNPACK function to do arithmetic with a packed decimal number or to move a packed decimal value into a numeric item.

UNPACK converts text that can be interpreted as a packed decimal number to a signed integer item.

The sign values for packed data are as follows:

  • C for positive (+)
  • D for negative (-)
  • F for unsigned, which is read as positive
    UNPACK ( single-fixed-size-text-expression )
    UNPACK ( text_to_unpack )
    A single signed integer

UNPACK returns a signed integer representing the value text_to_unpack, which is a packed decimal number. If the text_to_unpack cannot be interpreted as a valid packed decimal, UNPACK evaluates to "none".

In a packed decimal number, each half-byte is a digit, except for the last half-byte of the rightmost byte, which contains a sign.


  • UNPACK ( "1L" ) returns 314

    The ASCII string "1L" in hex is 31 4C, which, when interpreted as a packed number, results in (positive) 314. This example returns the value "+314".

    The hexadecimal representation of the value "1L" is x`14C', where C in the rightmost half-byte represents a positive sign.

  • UNPACK ( UnitPrice ) / 100 * QuantityOrdered

    UnitPrice is unpacked and divided by 100 (to convert it from an integer to a number with two decimal places) and then multiplied by the QuantityOrdered.

    You can define items as having a packed decimal number presentation. Then, when mapping to or from these items, the conversion to and from packed decimal is automatically performed as needed.

Related functions

  • PACK