Problem about Rotating the Character

So this is an isometric game…And I already have made a script, that handles the rotation of the character.Basically wha I want is interpolates/transition when rotating the character,so inside the FixedUpdate:

if (transform.eulerAngles.y != targetDir) {
			if (transform.eulerAngles.y >= targetDir+(threshold) || transform.eulerAngles.y <= targetDir-(threshold)){

				if (transform.eulerAngles.y < transform.eulerAngles.y-targetDir){
					transform.Rotate(-Vector3.up*turnSpeed,Space.Self);}

				if (transform.eulerAngles.y > transform.eulerAngles.y-targetDir){
					transform.Rotate(Vector3.up*turnSpeed,Space.Self);}
			}
			else{
 				transform.eulerAngles = new Vector3(0,targetDir,0);}}

And whenever I press a key(the controls)
I got something like this:

if (Input.GetKey("w")){
			targetDir = 45f;

But the problem is…for example the current rotation is equal to 315(facing left) and I press the W key(which sets the targetDir = 45f)
the rotation interpolates from 315 to 225 to 180 to 45
In SHORT COUNTER-CLOCKWISE.Well it’s much simpler and better if it goes clockwise right?
But I want it to rotate to it’s nearest 45 degree…

The reason why I don’t use lerpAngle for this,is because it’s not accurate,I mean sometimes it’s stuck like 44.9999 something like that…
Any help?Thanks

Ok never mind,I solved it, I went back, and use lerp again. Then just round it off…