That's about as accurate as you can get while using floats for the first part of the equation.
The same equation using doubles instead:
Math.Cos((Math.PI / 180) * 90)
gives 6.12303176911189E-17 as a result, which is much closer to 0, but still not there
Either way - it's generally close enough for most unimportant calculations (especially if you're not storing the results), but if you need higher precision, go with the System.Math class instead and cast to float at the last possible second if you need to push the values into the unity API