The rounding is probably happening in the conversion to a float. Instead of d
you can use the parameter s
which treats the input as a string, and the number will print correctly:
echo sprintf("%010d",(1142.87 * 100))."\n"; //displays wrong value
echo sprintf("%010s",(1142.87 * 100))."\n"; //displays correct value