For example in Cartesian system (x,y) as (1,0) sets you at UP position and the game calculates
2.25 speed multiplied by 1 = 2.25.
When you go diagonally it sets you somewhere like (0.981211, 0.019121) or whatever, because of the angle and how normalization of vectors works, meaning the game calculates
(2.25 multiplied by 0.981211) + (2.25 x 0.019121)
to move the unit as a player desires. When engine rounds up this number to 2 decimals it will be shown as 2.25, but actually is going to be 2.249452 or alike.
I can be wrong, but at least I'll know why if you explain