Moving an object on keypress

Hello everybody.
In my quest to solve the problem i previously had with moving objects using boolean flags(that turned out to be how i was referencing the objects instead…) i have rewritten my code to use raycast instead, then assign a variable equals to the raycast, and directly change the object position instead of using a method inside the object script.
The problem i have is that instead of moving objects of one unit, my code move objects of 1.19 instead (sometimes 1.22, sometimes 1.31…never the same amount).
This is how i manipulate the object and it’s position:

if ((hit) && hit.collider.name == "rock" && Input.GetKey(KeyCode.Space))
        {
            _object = hit.collider.gameObject;
            _objectDestination = _object.transform.position;
            _objectCurrentPosition = _object.transform;
            Debug.Log("gameobject" + _object.name);
            if(_objectCurrentPosition.position == _objectDestination)
            {
                switch (direction)
                {
                    case up:
                        _objectDestination += Vector3.up;
                        break;
                    case down:
                        _objectDestination += Vector3.down;
                        break;
                    case right:
                        _objectDestination += Vector3.right;
                        break;
                    case left:
                        _objectDestination += Vector3.left;
                        break;
                }
            }
        }
        if (_object)
        {
            _object.transform.position = Vector3.MoveTowards(_object.transform.position, _objectDestination, Time.deltaTime * speed);
        }

Does anyone know why it’s moving of 1+something instead of one unit (as it should while using vector3.up/down/left/right)?
Thank you.
Ps: i have the same code that moves my player, and there it works perfectly!

if (Input.GetKeyDown(KeyCode.D) && currentPos.position == targetPos)            //if we press the right key and we reached destination
        {
            hit = Physics2D.Raycast(startR, Vector2.right, checkLenght,collisionmask);                //raycast in the direction of the key pressed only on the layer 11 defined with the collisionmask
            manager.checkSolidTile(hit);                                                   //we process the "hit" object using the checkname function of the class collisionmanager
            if (hit)                                                        //if hit exist
            {
                Debug.Log("colliding with " + hit.collider.name);           //the name of the collider is printed
            }
            if(manager.solidTile==false)                                      //if the collision manager set the solid tag to false, basically if the tile we checked is solid or not
            {
                targetPos += Vector3.right;                                 //the destination is updated to the next destination in the direction of the key pressed
            }
        }

Because the actual movement is done via _object.transform.position = Vector3.MoveTowards(_object.transform.position, _objectDestination, Time.deltaTime * speed); The new position is not _objectDestination, but an amount of Time.deltaTime * speed between its current object.transform.position and the desired _objectDestination.

Time.deltaTime * speed is a way of saying that you want to move the object a certain amount per second and Time.deltaTime provides the current frame’s time, so the movement is proportional to the FPS. This works well if you move something continuously, like holding down a button. This isn’t useful if you want movement to happen once.

It would move instantly if you just did _object.transform.position = objectDestination. speed would become irrelevant.