Issue lerping localscale

Go an issue here scaling localy.

At the start of the scene, they are all at 0% scale, and the first use of GrowChain works as expected, objects grow to fullsize, though localscale.z never quite gets to 1, usually getting to about 0.9999999996 or something.
As soon as I shrink one, it only scales about 1/2 way down and appears to squash and stretch the model.

private IEnumerator GrowChain(GameObject go){
	while(go.transform.localScale.z < 1){
		float localZ = Mathf.Lerp(go.transform.localScale.z, 1, fadeTime * Time.deltaTime);
		go.transform.localScale = new Vector3(go.transform.localScale.x, go.transform.localScale.y, localZ);
		yield return null;
		go.transform.FindChild("ShockChainParticles").gameObject.SetActive(true);
	}
}

private IEnumerator ShrinkChain(GameObject go){
	while(go.transform.localScale.z > 0){
		float localZ = Mathf.Lerp(go.transform.localScale.z, 0, fadeTime * Time.deltaTime);
		go.transform.localScale = new Vector3(go.transform.localScale.x, go.transform.localScale.y, localZ);
		yield return null;
	}
}

any idea what I am doing wrong?

the third parameter is float between 0f and 1f

so you should put there fadeTime/totalTime (where fadeTime is current time between 0f and totalTime and totalTime is end time of lerp)