GameObject moving back and forth, moves slightly further left each time.

To explain better, the moving block gameobject will start at lets say X = 76. It will move left to X = 69. Then it will start to return towards X=76 but instead it will stop at around 75.9. Then it will move left to 68.9. So it will continuously move slightly more to the left with each pass. I don’t want to use Mathf.PingPong.

public class MovingBlock : MonoBehaviour
{

    public bool inTrigger = false;
    private bool cR = true;
    public bool left, right, up, down;
    public float vel = 5;
    public float timeToMove;
    private bool currentPhase;

    void Update()
    {
        if (inTrigger == true)
        {
            if (cR == true)
            {
                StartCoroutine(Move());
                cR = false;
            }
            if(currentPhase == true)
            {
                if (down == true)
                {
                    transform.Translate(Vector2.down * Time.deltaTime * vel);
                }
                if (left == true)
                {
                    transform.Translate(Vector2.left * Time.deltaTime * vel);
                }
                if (right == true)
                {
                    transform.Translate(Vector2.right * Time.deltaTime * vel);
                }
                if (up == true)
                {
                    transform.Translate(Vector2.up * Time.deltaTime * vel);
                }
            }
            if(currentPhase == false)
            {
                if (down == true)
                {
                    transform.Translate(Vector2.up * Time.deltaTime * vel);
                }
                if (left == true)
                {
                    transform.Translate(Vector2.right * Time.deltaTime * vel);
                }
                if (right == true)
                {
                    transform.Translate(Vector2.left * Time.deltaTime * vel);
                }
                if (up == true)
                {
                    transform.Translate(Vector2.down * Time.deltaTime * vel);
                }
            }
        }
    }

    private IEnumerator Move()
    {
        currentPhase = true;
        yield return new WaitForSeconds(timeToMove);
        currentPhase = false;
        yield return new WaitForSeconds(timeToMove);
        cR = true;
    }

    void OnTriggerEnter(Collider other)
    {
        if (other.GetComponent<Collider>().tag == "Player")
        {
            inTrigger = true;
            cR = true;
        }
    }
}

Your issue is caused by “floating point inaccuracy”.

A workaround in your situation would be to check if the position is within a small range of your desired position, and if so then move to the desired position.