I always over-estimate. That way, when I tell them my estimate was high, they're shocked and impressed, and glad to save some money. Higher satisfaction, and they're likely to return.
Alternatively, you could give them a range. Let them know up front that, pending unforeseen problems, it could cost between $x and $y.