I agree with cash. Credit card fraud is a major issue, so I avoid having to use it in many foreign ports. If I know I will be doing shopping (like I did in Columbia) I estimate how much I am going to spend and get that in the local currency from my bank. Its a lot easier to use local currency than to try and negotiate exchange rates and then get correct change back. Its almost like you lose twice. They round in their favor when converting your money for the transaction and then when giving back the change, they again round in their favor.