Oh! English is so confusing. Yes, we know that!
So why can't we say directly that "I had an affair" rather than saying "I've had..."
We can say "I had an affair". Context dictates which verb form we use.
So, if I understand it correctly, if we use "I've had" and give a time like "since/for a year" etc it means the activity is still going on and if I don't give a time frame it means it started and ended in some time in the past.
I've had a headache for a week = I have a headache now and it started a week ago.
I've had a headache = At some point in my life, I have experienced a headache.
1) I have stayed in Malaysia. (I started staying there sometime in the past and I don't stay there anymore.)
2) I have stayed in Malaysia for the past 2 years. (I started staying here 2 years ago and still staying here while I speak.)
If you change the verb in both to "lived", they will be more natural and your understanding of each will be correct.
I am sorry for asking too many questions. :-(