Easiest way to do this is with _UNSIGNED_INTEGER64 values, so you can read and work with 18 digits at a time.
For example:
1234567890.9078563412 is the same as 000000001234567890.907856341200000000. <-- This scaled our string to a limit of digits so we can work with it in two chunks (left side of decimal once, right side of decimal once).
It's a ton faster than reading and adding a single digit at a time.
(Greater precision should be processed in batches of 18, then reduced to set limit, as desired.)
I'm occupied here taking care of mom for the next few days, but if you need me to write a quick demo, I'll do it when I get back home after. ;)
Unsigned int64 is 18,446,744,073,709,551,615, which gives you room to add two 18-digit values together and have the 19th digit for the carry-over.