def _set_bit_size(self, size, step=1, auto_align=False):
        """ Sets the *size* of the `Decimal` field.

        :param int size: is the *size* of the `Decimal` field in bits,
            can be between ``1`` and ``64``.
        :param int step: is the minimal required step *size* for the `Decimal`
            field in bits.
        :param bool auto_align: if ``True`` the `Decimal` field aligns itself
            to the next matching byte size according to the *size* of the
            `Decimal` field.
        """
        # Field size
        bit_size = int(size)

        # Invalid field size
        if bit_size % step != 0 or not (1 <= bit_size <= 64):
            raise FieldSizeError(self, self.index, bit_size)

        # Field group size
        group_size, offset = divmod(bit_size, 8)
        # Auto alignment
        if auto_align:
            if offset is not 0:
                self._align_to_byte_size = group_size + 1
            else:
                self._align_to_byte_size = group_size
        # Invalid field alignment
        elif group_size > self.alignment.byte_size:
            raise FieldAlignmentError(self, self.index,
                                      Alignment(group_size,
                                                self.alignment.bit_offset))
        # Set field size
        self._bit_size = bit_size