Or do weird things
Working for insurance company, in the dim and distant, when storage cost money.
So, how did we handle UK decimal currency in PL/1?
We defined a signed fixed (11,1) (packed decimal) field which took 6 bytes, and then moved the amount in pennies into it, so we got 001234567890C in hex. So £123.45 was x'000000123450C'
Then, we defined a 5-byte character field on top of that, using a pointer.
Then we moved the five bytes into the record for storage, to save the waste of space of the last x'0C'.
Reverse process when reading.
It got worse. Disk storage was expensive. We had one file which was a Regional(1) dataset (if I remember rightly from 30+ years ago). These had no key, but were accessed by location on disk. The file held 10,000,000 one-byte records, one for each policy number. The first two bits of the byte held two status indicators, the last 6 bits held an integer that was the policy type (10-63).
Ah the good old days.