Matrix record begins like this:
HasScale UB[1]
NScaleBits If HasScale=1, UB[5]
ScaleX If HasScale=1, FB[NScaleBits]
ScaleY If HasScale=1, FB[NScaleBits]
...
FB[NScaleBits] is indeed a fixed-point value, but not necessarily 16.16 - it all comes down to NScaleBits (so it's different from the regular fixed-point number, which is always 16.16).
The number of bits used is fixed or specified beforehand, like in case with Matrix, so Flash Player just knows.
For instance, 2.8 would be if 0x28000 in dex, and NScaleBits is 19 in this case, because we need minimum of 3 bits to represebt signed number "2" (3 + 16 = 19).
I know this is an old question. Still, someone might stumble upon it, the way I did.