While it feels like an evil hack, there is a workaround:
ini_set('precision', 15);
before decoding would disable display rounding enough for you to be able to cast it to a string intact (PHP's display default is 14 digits and your number has 15).
Assuming that the example ID number is accurate (if it's actually 16 digits long then the roundoff is real and not just for display, and poit goes the whole idea. Like I said: evil hack.)