Float speed doesn't listen a condition

public float speedDef = 0.25f; //Setted speed
public float speedMax = 1.0f;
private float speedMin = 0.0f;
public float speedRes = 0.001f; //To restore speed to initial speed (speedBase)
public float accel = 0.005f;
public float decel = 0.0005f;
public float brake = 0.0025f;
private float speedCur; //Current speed in calculation
private float speedBase; //Initial speed to memorize
private Vector3 lastPosition = Vector3.zero;

void Start()
{
    speedBase = speedDef;
}

void FixedUpdate()
{
    //Speed Calculation
    speedCur = (transform.position - lastPosition).magnitude;
    lastPosition = transform.position;
    Debug.Log(speedCur);

    //Default Speed
    transform.position += transform.forward * speedDef;

    //SPACE (Acceleration)
    if (Input.GetKey(KeyCode.Space))
    {
        //Acceleration
        if (speedCur < speedMax)
        {
            speedDef += accel;
        }
    }
    else
    {
        //Deceleration
        if (speedCur > speedBase)
        {
            speedDef -= decel;
        }
    }

    //LEFT SHIFT (Brake)
    if (Input.GetKey(KeyCode.LeftShift))
    {
        if (speedCur > speedMin)
        {
            speedDef -= brake;
        }
        else
        {
            speedDef = speedMin;
        }
    }
    else
    {
        if (speedDef < speedBase)
        {
            speedDef += speedRes;
        }
    }
}

Everything above that is fine except in brake function, when I pressed Left Shift for first time, the player brakes until that he has speed 0. It worked but if after that, I release this button to let the player to restore his speed then I press again the Left Shift, the speed goes over -0,x until -1, -2, -3,… even with very clear condition like this:

     else
     {
         speedDef = speedMin;
     }

It doesn’t want to listen it… How to solve it?

Thanks!

You can use speedDef = Mathf.Clamp(speedDef , speedMin, speedMax); at the end of the Update() function to be sure that speedDef will always be higher or equal to speedMin and lower equal to speedMax.

Here is a link to the unity documentation.