calculator: do not use integer variable in read_number() to store intermediate values

on 32-bit systems "unsigned long int" is only 32-bit and reliably leads to an arithmetic
overflow; even with uint64_t there would be no guarantee that valid numbers get parsed correctly;
storing intermediates as float should be safe.