Well, I think you're making it harder than it needs to be.
For one, what about using the custom movement behavior and just working with integer values?
Then, about the gap issue, I'd use an FSM to solve it
if (player.state === "running")
--- move him on the x axis first and push him out of solids to the nearest available position.
--- then check if he's on the ground to determine whether or not the character should go to the falling state
Or you can use a collider that's a bit longer than the character and that you use for collisions when the player is running.
In any case, even if you shouldn't use the official platform behavior, there's a nice plugin available on the forums (platform + i think) as well as the custom movement behavior to do the job.
Good luck!