http://www.cnn.com/2009/US/07/15/quadri ... index.html
The Slashdot summary has a write up on what may have caused this:
"Recently several Visa card holders were, um, overcharged for certain purchases, to the tune of $23,148,855,308,184,500.00 on a single charge. The company says it was due to a programming error, and that the problem has been corrected. What is interesting is that the amount charged actually reveals the type of programming error that caused the problem. 23,148,855,308,184,500.00 * 100 (I'm guessing this is how the number is actually stored) is 2314885530818450000. Convert 2314885530818450000 to hexadecimal, and you end up with 20 20 20 20 20 20 12 50. Most C/C++ programmers see the error now ... hex 20 is a space. So spaces were stuffed into a field where binary zero should have been."
Ironically, if they had trim()'d the data before processing it, this probably wouldn't have happened (or I'd imagine casting it to an int would've worked). This is why you often can't trust data to be what you think it is!
Edit edit: Forgot to hit "submit" after leaving the edited copy open for about a half hour.