Why are my X, Y and Z position values going all wonkey?

Hey all, I’m a noob to Unity and game engines in general so I’m sorry if my question seems redundant or overly simple. When I play the scene I have so far the position values of the player object (just a cube for now) are all 0.00. I noticed the issue when I had the cube jump and land in pretty much the exact same position. Before the cube left that spot the posotion values would be (0, 0, 0) according to the Inspector, when it lands however the X and Z are still zero but the y seems to be a random value every time I jump and land. If I move the cube along the x or Z then all the position values go helter skelter. Any ideas?

Float imprecision. Basically an effect that is caused by the fact that your X, Y and Z values are 32 bits of data each. These 32 bits are supposed to be able to represent very large numbers (1,000,000) and very small numbers (0,0000001). The way floating point numbers do this introduces imprecisions in calculation results. As long as your gameplay “feels fine”, you shouldn’t worry about these while developing a game.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerController : MonoBehaviour {

    public float speed = 20;
    public float jumpspeed = 1;
    public float collected = 0;
    public bool isDoorOpen = false;
    public GameObject coin;
    Rigidbody rb;

	// Use this for initialization
	void Start () {
        print(collected);
        rb = GetComponent<Rigidbody>();
		
	}
	
	// Update is called once per frame
	void FixedUpdate () {

        float moveHorizontal = Input.GetAxis("Horizontal");
        float moveVertical = Input.GetAxis("Vertical");

        Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);

        rb.AddForce(movement * speed);
        
        if (Input.GetKeyDown("space"))
        {
            Vector3 jump = new Vector3(0, 1, 0);
            rb.velocity = jump * jumpspeed;
        }
        
        if (Input.GetKeyDown("e"))
        {
             speed = Random.Range(1, 20);
            print(speed);
        }

        if (collected == 12)
        {
            isDoorOpen = true;
            collected = 0;
        } 
       

       
		
	}

   
    private void OnTriggerEnter(Collider other)
    {
        if (other.gameObject.CompareTag("Pick Up"))
        {
            other.gameObject.SetActive(false);
            collected += 1;
            print(collected);
        }
    }
}