You're absolutely right about decimal. It's borked.
This is actually a fairly difficult problem for SQLite, who's numbers are limited to Int64 and Double -- neither of which is sufficient to store a Decimal
If you insert a number like this:
insert into numtest(id, myvalue) values(2, 165498732165498711213123.23323);
SQLite is going to truncate it.
So ... the answer is ... I can either store decimals in binary format, or store them as strings. And even if I store them as strings, it'll require you to insert them as strings or risk losing precision on the insert.
Strings are obviously more legible and easier to insert manually (without using a parameterized query) but binary would obviously be more compact.