Please at least pay us for the postage

A reader writes:

I don't know if this really qualifies as a science question, but: How do bills for zero dollars and zero cents get sent to people?

I'm guessing that it's something like the process you explained that leads to crazy negative numbers in installer disk-space calculations - maybe the system's screwed up and thinks you owe negative money (or you really do, because you overpaid), but there's a sanity check that rounds negative numbers to zero, and then fails to stop a bill being sent anyway.

Am I right?

Jiri

Exactly this sort of thing has been referred to since time immemorial, or at least since the early days of office automation...

...as a "computer error".

Which it isn't, of course. Once in a very long while a cosmic-ray strike or failing power supply or actual hardware defect does really cause a computer to make an error, but the overwhelming majority of "computer errors" are actually programmer errors. The computer is doing exactly what it was told to do, whether that's sending a bill for $0.00, or charging a startled pensioner for a hundred million kilowatt-hours of electricity, or falsely saying an e-mail came from FinkyPieheimer@zoobatz.com.

One programming error that can lead to a zero dollar bill - and, in due course, to second requests and final demands and then the attention of lawyers, if only because the lawyers are happy to round the ten seconds needed to recognise the mistake up to about ten billable hours - is using the wrong kind of variable.

In the real world, money comes in dollars and cents, pounds and pennies, rupees and extremely un-valuable paise, and so on. There's no such thing as a fraction-of-a-cent coin.

In computers, everything can be chopped up into arbitrarily small pieces, if necessary. There may be some good reason to do this for certain calculations applied to currency amounts (though I can't think of one), but if you do, before any of the results get turned into actual money being paid into accounts or demanded from clients, the numbers should be rounded into an integer number of cents (or whatever other currency unit's being dealt with).

(This process can be exploited, in the classic "salami slicing" scam where a great many fractions of a cent are sneakily diverted to the scammer's account by, for instance, always rounding down, even when the fraction being rounded is larger than 0.5.)

If a programmer uses, say, a single-precision floating-point variable to hold a monetary value, it's easy for the limited precision of the variable to, when mathematical operations are performed on it, end up at 0.9999 (probably with a few more digits) instead of 1, or 0.0001 instead of zero. In the latter case, a system that doesn't round off the imprecise value to what it should be, and subsequently starts the billing process on any account where the amount owing is greater than zero, will send idiotic zero-bills to customers.

(Or the only slightly less stupid version, a bill for an amount less than what the company paid to post the bill to you.)

There are many other ways for this to happen, though, thanks to the many ways in which programmers can make a mistake. A billing system could, for instance, fail to notice previous overpayment, decide to send a bill, then apply the overpayment to the account balance and send a bill for the net amount, which could be zero or negative. Or it could decide to send a bill to a customer who legitimately owes money, and then accidentally print the amount that some other, fully paid-up, customer owes on the bill.

Just because a company's got thousands of employees and annual turnover greater than the whole economy of some nations does not preclude this from happening. As Daily WTF readers know, staggeringly expensive "enterprise" software can be very, very badly written.


Psycho Science is a regular feature here. Ask me your science questions, and I'll answer them. Probably.

And then commenters will, I hope, correct at least the most obvious flaws in my answer.

9 Responses to “Please at least pay us for the postage”

  1. Anon Says:

    (Or the only slightly less stupid version, a bill for an amount less than what the company paid to post the bill to you.)

    Some corporate lawyers think that spending more fighting a frivolous lawsuit than what the plaintiff demands is worth it just to deter others from doing the same thing (and they may well be right).

    Still, it'd have to be a pretty small bill to cost more to post.

  2. Chazzozz Says:

    Another reason for a $0 bill is if your company is preparing a no-charge contract. The one I work with does this on occasion when we perform chargeable work for no cost to the customer (usually an escalated customer support issue). The contract is put in place to provide legal protection for both parties but we choose to not actually bill anything for it.

    Of course, there's no surprise or "WTF??" for either party, but it illustrates one situation where you may want to do so.

  3. Anne Says:

    One of the hospitals around here (in Canada) used to send $0 bills to people. They'd itemize all the costs the person had incurred during their visit, then deduct the amount paid by the government - usually all of it. The motivation for sending the bill, I think, was to discourage frivolous use of medical resources (ambulances for non-emergencies, for example). The charmingly naive idea that people would be discouraged from abusing the system by being told how much they'd cost the government seems characteristically Canadian.

  4. Anne Says:

    Actual computer errors do occur. A friend who worked at Google noticed that memory errors were more common at their higher-altitude data centers and looked into the possibility of using Google datacenters as cosmic-ray detectors (she was working on hardware diagnostics, and therefore could map not just the number of memory errors but their physical locations). Turns out it's not that useful, since cosmic rays wander in the Galactic magnetic field, making their direction uninformative.

  5. Asm Says:

    Well, you do occassionally need fractions-of-a-cent calculations - for instance, these 0.09 cent (yes, cent) resistors:

    http://search.digikey.com/us/en/products/RC0603JR-0710KL/311-10KGRTR-ND/726700

    Only in quantities of 100000, though. Oh well.

  6. WeaselITB Says:

    Here in 'Merika, we routinely wind up with rounding prices thanks to gas stations and their 9/10ths of a cent practices ... http://www.wisegeek.com/why-do-gas-prices-always-end-in-910-of-a-cent.htm

    I've seen this same tactic applied to natural gas deliveries, electrical deliveries, propane tanks, etc. It's becoming quite widespread.

  7. Mohonri Says:

    There's a variation on this, where parties of a class-action lawsuit get some pittance in the settlement, while the lawyers make bank. I recently got a check for $0.16 as my part of a settlement reached with eBay over too-high Final Value Fees. It cost them at least four times that much just to print the check and mail it to me.

  8. bigtech Says:

    I've always taken this is more of a policy than a bug. The rational being for monthly billing you send 12 bills per year, which would satisfy both obsessive-compulsives and auditors. I receive $0.00 bills on electronic e-bills as well.

  9. unfunk Says:

    I used to do tech support for a British telco (they outsourced to Adelaide. Go figure). Of the many crazy stories I can remember about their billing back-end, one sticks out the most.

    We once billed a customer for -£1.69... and because he had Direct Debit set up, we tried to deduct -£1.69 from his bank account. Not credit him with £1.69, mind you! The system really tried to deduct a negative amount of money.

    I'm getting a headache just remembering it!


Leave a Reply