It can vary quite a bit. For example, you can have code so well written that comments would just be a waste of time.
You need enough comments so months later you can look at your code, read the comment, and just pick up where you left off, without much effort. If the life story of the code isn't required, don't write it.