in reply to Stupid sprintf question - decimals

It's not a problem with rounding so much as a problem storing the number in the first place. Double precision floats have roughly 16 decimal digits of precision.
12314212412124124124.10623 (Your number) |------16------| 12314212412124123136.00 (The output)

You'll need something that can support more precision, such as Math::BigFloat or build of Perl that supports quad precision floats.