http://www.perlmonks.org?node_id=804225


in reply to Re: sprintf rounding convention
in thread sprintf rounding convention

That's incorrect. %f and other floating point specifiers always round to even. From F0convert:
nv += 0.5; uv = (UV)nv; if (uv & 1 && uv == nv) uv--; /* Round to even */

(There are paths I didn't take the time to understand, so maybe it doesn't always get to this function.)