Bitcoin vendors (should) generate a new address for each transaction.
They will say something like
Please send 2.57BTC to 1AAZ4xBHbiCr96nsZJ8jtPkSzsg1CqhwDa
Now... very sensibly, Bitcoin addresses are self consistent, making it very hard to mistype one and send the money to someone other than you intended.
But... the amount can still be mistyped.
How about this then? A new address format which includes the amount and the address, both checksummed?
Please cut and paste this address zdfga1AAZ4xBHbiCr96nsZJ8jtPkSzsg1CqhwDa
It would be an extra few bytes at the end of the address, and it would be entirely UI-based, never getting anywhere near the block chain. But it would mean that a customer could cut and paste the address given by the vendor into the Bitcoin client (or any of the online wallets if it became standardised) and the amount field would be automatically filled in, along with the "true" bitcoin address. Obviously it would still need confirmation from the user, but it would make accidents like "Ooops I just sent 100 BTC when I meant to send 10 BTC to a vendor" much less likely; and much easier for Grandmas to use.
It could be easily handled by making a new bitcoin address version byte; which would trigger the special handling in the client(s).