The Life of 30 Dollars
A price looks like a number. By the time it reaches a receipt, it has been through more than most people think.
Let me tell you about one price. Nothing dramatic happens to it. That is the point. Most money problems I deal with are not dramatic either. They are small, quiet changes to a number that nobody notices until the end of the month, when the totals don't match, and someone has to find out why.
So here is the life of one ordinary price: $30 a month for a plan called Pro.

It starts as words on a screen.
Someone on the team opens the page where new plans are added. They type “Pro”, then “30”, then pick a currency from a list.
At this moment, the price is not money yet. It is just text somebody typed. It could say 30. It could say 30.00. It could say “thirty”. It could say 3O, with the letter O instead of a zero, because that happens more than you would expect.
The first thing I want to know is not whether the price is right. It is whether the price is even a price.
Thirty dollars becomes three thousand
Here is the first thing that surprises people. I do not keep 30 dollars as 30. I keep it as 3000 cents, as a whole number.
Why? Because whole numbers behave. Decimals often do not.
Try this on almost any calculator inside a computer. Add 0.10 to itself ten times. You expect exactly 1. What you often get is 0.9999999999999999... The machine stores decimal numbers in a way that cannot hold 0.10 exactly, so every step is slightly off.
A tiny bit off sounds harmless. Now picture a company with 200,000 small payments a month, each off by a fraction of a cent, all added together in a report. The totals drift. Not by much. Just enough that the money in the bank and the money in the books never quite agree, and an accountant spends a week hunting for 3 dollars and 41 cents.
Whole cents do not drift. 3000 plus 3000 is 6000, every single time. When I need to show the price to a person, I divide by 100 at the end and write $ 30.00. The number underneath never changes.
There is one catch. Not every currency has 100 small parts. The Japanese yen has none, so 500 yen is stored as 500. A few currencies have 1,000 parts. So “divide by 100” is a habit for dollars and euros, not a rule for every currency.
A number alone is a guess
Now the price is 3000. But 3000 what?
3000 cents is 30 dollars. 3000 cents in euros is 30 euros. 3000 yen is about the price of a lunch. Same number, three very different prices.
So I never let an amount travel alone. Every amount is saved together with its currency, written the same way every time: three small letters, like usd or eur. Not USD in one place and usd in another. Not “dollars”. Not “us”. Exactly three letters, nothing before and nothing after.
That last part matters more than it sounds. A check that only asks, “does this contain letters?” will happily accept “us dollars please” because it contains letters. The check has to look at the whole value, from the first character to the last.
If an amount ever shows up without its currency, I treat it as broken, not as dollars by default. Guessing the currency is how a 30 euro plan quietly gets charged as 30 dollars.
The typo nobody saw
A few weeks later, someone adds a bigger plan. They mean 49.99 dollars. They type 49.99.
But the system expects cents as a whole number. 49.99 cents is not a whole number. So what happens next depends on how polite the system is.
A polite system rounds it. 49.99 becomes 50. Fifty cents. A plan that should cost almost 50 dollars now costs half a dollar, and nothing turned red to say so.
I have seen this happen in a test. I saved 29.99, and the record simply said 30. No warning. No error. Just a different number.
If 100 people buy that plan before anyone notices, that is 4,949 dollars that will never come back. Asking those customers to pay the difference later is a conversation nobody wants to have.
So I am not polite here. If an amount is not a whole number of cents, I send it back. “This needs to be in cents. Did you mean 4999?” It is a little annoying for the person typing. It is much less annoying than 100 refund emails.
The last guard
Here is the part people skip.
All the checks I described so far can live on the screen where prices are typed. That screen is friendly. It shows a clear message next to the wrong field. I like it.
But prices do not only come in through that screen. Someone runs a script at night to import a spreadsheet. A different team builds a new page next year. A quick fix is made by hand during a busy afternoon. None of them pass through the friendly screen.
So the most important rules also live on the record itself, where the money is finally written down. An amount can never be negative. An amount can never be saved without a currency. A currency is always exactly three small letters. If anything tries to break those rules, it is refused, no matter where.
The screen is there to be kind. The record is there to be right. When they disagree, the record wins.
Thirty dollars, finally on a receipt
A customer named Sara picks the Pro plan. The record says 3000 USD. Her receipt says 30.00 dollars. Her bank statement says 30.00 dollars. The end-of-month report adds her 3000 to everyone else’s and gets a total that matches the bank to the cent.
Nobody at the company thinks about her 30 dollars again. That is exactly how it should be.
The best way to keep money is to keep it boring. A whole number. A currency right next to it. A rule that rejects anything strange instead of quietly fixing it. Do that, and 30 dollars stays 30 dollars from the first keystroke to the last receipt. Skip it, and you end up chasing 3 dollars and 41 cents through a month of reports, or explaining to 100 customers why their plan cost 50 cents.
- Payments
- Fintech
- Software Engineering
- Accounting
- Billing
