In general this is fairly straightforward to use, but read on, there are times when this can cause problems. Don't be caught out.
"I have" refers to something in general, sometimes or all the time.
"I am having" refers to something happening at the time of speaking.
Let's look at an example:
"I have dinner...at 6 o'clock every evening" This is a statement of something that happens
all, or most, of the time so we use I have.
"I'm having dinner...at the moment" This is a statement of something that is happening
right now, at the time of speaking.
Other examples include:
"I have a shower....every morning"
"I'm having a shower" ...right now the speaker is standing under running water.
"I have coffee with my friend every Wednesday"
"I'm having coffee with my friend" ...it's Wednesday
However, this can get confusing especially when we consider the following examples:
"I have a cold" is correct. This refers to a general state. It was true this morning, it's true now and it will unfortunately still be true this evening.
"I am having a cold" is not correct. Although it is something happening at the time of speaking (you are coughing and sneezing) it is not something you have any control over since you didn't choose to have a cold and you also cannot decide when it will end.
This is therefore different to the examples above "I am having a shower", "I am having dinner", "I am having coffee", which are all happening at the time of speaking, but do have a controllable end time.
Another comment which I hear frequently is "I am having to work this evening".
This is not correct...do you know why?
I am having is used when the activity is actually taking place "I am having coffee with a friend at the moment" it therefore cannot be used with a time in the future.
The correct sentence should be: "I have to work this evening". We use "I have" since it is a general statement.